spark 读写text,csv,json,parquet
以下代码演示的是spark读取 text,csv,json,parquet格式的file 为dataframe,
将dataframe保存为对应格式的文件
package com.jason.spark23
import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SaveMode, SparkSession}
object ReadTest {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName("readtest")
.master("local")
.getOrCreate()
val pathjson = "C:\\notos\\code\\sparktest\\src\\main\\resources\\employees.json"
val pathavsc = "C:\\notos\\code\\sparktest\\src\\main\\resources\\full_user.avsc"
val pathtxt = "C:\\notos\\code\\sparktest\\src\\main\\resources\\people.txt"
val pathcsv = "C:\\notos\\code\\sparktest\\src\\main\\resources\\people.csv"
val pathparquet = "C:\\notos\\code\\sparktest\\src\\main\\resources\\users.parquet"
val sc = spark.sparkContext
println(s"-----------------read--------------------------")
println("====txt df")
val txtrdd = sc.textFile(pathtxt).map(_.split(",")).map(arr => Row.fromSeq(arr))
val schemaString = "name age"
val fields = schemaString.split(" ")
.map(fieldName => StructField(fieldName, StringType, nullable = true))
val schema = StructType(fields)
val txtDf = spark.createDataFrame(txtrdd, schema)
txtDf.show()
println("====json df") //jsondf 会自动给schema设置类型
val jsonDf = spark.read.json(pathjson)
jsonDf.show()
println("==== csvdf")
//会根据值自动生成类型
val csvdf = spark.read.format("csv")
.option("sep", ";")
.option("inferSchema", "true")
.option("header", "true")
.load(pathcsv)
csvdf.show()
println("====parquet df")
val usersDF = spark.read.load(pathparquet)
usersDF.show()
println("----------------------------------write-------------------------------")
val path = "C:\\notos\\code\\sparktest\\src\\main\\"
println(s"====txt output")
implicit val mapEncoder = org.apache.spark.sql.Encoders.kryo[String]
csvdf
.write
.format("csv")
.mode(SaveMode.Append)
.options(Map("compression" -> "bzip2", "sep" -> "\t", "header" -> "false"))
.save(path + "\\text")
println(s"====csv output")
csvdf.write.mode(SaveMode.Ignore)
.format("csv")
.option("sep", "|")
.option("header", "true")
.save(s"$path\\csv")
println(s"====json output")
csvdf.write.mode(SaveMode.Append)
.format("json")
.save(path + "\\json")
println(s"====parquet output")
csvdf.write.mode(SaveMode.Append)
.format("parquet")
.save(s"$path\\parquet")
spark.stop()
}
}
上述将dataframe保存为text为也采取了csv格式,若要保存为text,dataframe中只能有一个String类型的字段,但是一般dataframe都不止一个字段,保存为text时也要指定字段分隔符,正好与csv的要求一致,而且csv格式的文件也可以用 sc.textFile 方法来读取
spark 读写text,csv,json,parquet的更多相关文章
- 使用Spark读写CSV格式文件(转)
原文链接:使用Spark读写CSV格式文件 CSV格式的文件也称为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号.在本文中的CSV格 ...
- solr File Upload "Unsupported ContentType: application/vnd.ms-excel Not in: [application/xml, application/csv, application/json, text/json, text/csv, text/xml, application/javabin]",
今天在用solr管理界面导入文件时报错:"Unsupported ContentType: application/vnd.ms-excel Not in: [application/xm ...
- SparkSQL读写外部数据源-json文件的读写
object JsonFileTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .m ...
- Spark 读写hive 表
spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...
- Data_r_and_w(csv,json,xlsx)
import osimport sysimport argparsetry: import cStringIO as StringIOexcept: import StringIOimpo ...
- Spark读写HBase
Spark读写HBase示例 1.HBase shell查看表结构 hbase(main)::> desc 'SDAS_Person' Table SDAS_Person is ENABLED ...
- spark读写mysql
spark读写mysql除官网例子外还要指定驱动名称 travels.write .mode(SaveMode.Overwrite) .format("jdbc") .option ...
- Spark读写ES
本文主要介绍spark sql读写es.structured streaming写入es以及一些参数的配置 ES官方提供了对spark的支持,可以直接通过spark读写es,具体可以参考ES Spar ...
- text to JSON
text to JSON GeoLocaltion API https://www.cnblogs.com/xgqfrms/p/13283680.html https://repl.it/@xgqfr ...
随机推荐
- 关于Classloader(学习笔记)
1)类加载的过程是怎么样的?①加载:根据具体需求,选择合适的加载器(Bootstrap ClassLoader不可直接获取.Extension ClassLoader.系统.自定义)来控制字节流的获取 ...
- 简要总结selenium四个工具组
selenium 是基于WEB的自动化测试工具. 由以下几个工具组组成 1.selenium IDE: 一个火狐插件 点击这个插件就进入录制界面,能够记录用户的操作,并且将其导出为可重复使用的测试脚本 ...
- OpenCV应用(4)雄迈相机网络取图
第一种办法 单张图获取 网页打开#//http://192.168.1.82/webcapture.jpg?command=snap&channel= 1 网页打开直接抓一张图 python ...
- 使用Map文件查找崩溃信息
简介 编写整洁的应用程序是一回事.但是当用户告诉你你的软件已经崩溃时,你知道在添加其他功能之前最好先解决这个问题.如果你够幸运的话,用户会有一个崩溃地址.这将大大有助于解决这个问题.但是你怎么能用这个 ...
- luogu_3645: 雅加达的摩天楼
雅加达的摩天楼 题意描述: 有\(N\)座摩天楼,从左到右依次编号为\(0\)到\(N-1\). 有\(M\)个信息传递员,编号依次为\(0\)到\(M-1\).编号为i的传递员最初在编号为\(B_i ...
- 洛谷 P2872 【[USACO07DEC]道路建设Building Roads】
P2872 传送门 首先 题目概括:题目让着求使所有牧场都联通.需要修建多长的路. 显然这是一道最小生成树板子题(推荐初学者做). 那我就说一下kruskal吧. Kruskal算法是一种用来查找最小 ...
- 传统IT容量估算思路
参考: https://www.cnblogs.com/zhangweizhong/p/5844961.html https://www.cnblogs.com/zhangweizhong/p/577 ...
- javaScript 判断为false
JavaScript把null.undefined.0.NaN和空字符串''视为false,其他值一概视为true
- vue中使用时间插件、vue使用laydate
<input id="time1" readonly="readonly" placeholder="这里选择时间" v-model= ...
- Features Track[STL map]
目录 题目地址 题干 代码和解释 参考 题目地址 Features Track(ACM-ICPC 2018 徐州赛区网络预赛 ) 题干 代码和解释 题意:一个动画有许多 n 帧,每帧有 k 个点,点的 ...