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 ...
随机推荐
- jsp request对象
getParameter( ) :返回name指定参数的参数值 String[] getParameterValues(String name) :返回包含参数name的所有值的数值 getA ...
- iOS的事件派发
dispatchPreprocessedEventFromEventQueue 先定位:hittest * thread #1, queue = 'com.apple.main-thread', st ...
- applyMiddleware 沉思录
let newStore = applyMiddleware(mid1, mid2, mid3, ...)(createStore)(reducer, null); 给({ getState, dis ...
- Error handling in Swift does not involve stack unwinding. What does it mean?
Stack unwinding is just the process of navigating up the stack looking for the handler. Wikipedia su ...
- Ribbon自带负载均衡策略
IRule这是所有负载均衡策略的父接口,里边的核心方法就是choose方法,用来选择一个服务实例. AbstractLoadBalancerRuleAbstractLoadBalancerRule是一 ...
- ESA2GJK1DH1K微信小程序篇: 安装Nginx,配置反向代理
前言 一,为什么需要反向代理 小程序访问的是 443端口,咱需要把443端口的数据传给MQTT 这节为了避免大家配置出错,以下源码已经配置. 如果大家想自己配置,请参考 https://www.cnb ...
- for、for...in、for...of的区别
当有一个元素未定义时,for和for...of遍历该元素为undefined,for...in遍历不到. 如果是自定义属性,for和for...of无法遍历,for...in可以遍历. for...i ...
- 模拟测试20191017~18 lrd Day1& Day2
$Day1:$ $T1:位运算$ 从低位到高位分类讨论就好了 记得判$inf$ $T2:集合论$ 考场上差点就打线段树了 用一个数组维护,同时用一个变量代表当前总体$+$&&$-$的值 ...
- P3386 【模板】二分图匹配(匈牙利算法)
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- nginx.conf 配置解析之 http配置
官方文档 http://nginx.org/en/docs/参考链接: https://segmentfault.com/a/1190000012672431参考链接: https://segment ...