spark dataframe构建方式

本文介绍了Spark中构建Dataframe的多种方法,包括从Seq、List、RDD转换,使用`toDF`方法和`sparkSession.createDataFrame`,以及通过读取csv、json、jdbc、hive、mysql等数据源创建Dataframe。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark dataframe构建方式

1.从Seq序列转为dataframe,使用toDF方法,需要隐式转换

val df = Seq((1,"brr"),(2,"hrr"),(3,"xxr")).toDF("id","name")
df.show()
输出:
| id|name|
+---+----+
|  1| brr|
|  2| hrr|
|  3| xxr|
+---+----+

2.从List转为dataframe,跟Seq序列转为dataframe类似

val df = List((1,"brr"),(2,"hrr"),(3,"xxr")).toDF("id","name")
df.show()
输出:
| id|name|
+---+----+
|  1| brr|
|  2| hrr|
|  3| xxr|
+---+----+

3.从RDD转为dataframe,使用toDF方法,需要隐式转换

val rdd = sc.parallelize(List((1,"brr"),(2,"hrr"),(3,"xxr"))) #sc为已有的sparkContext对象
val df = rdd.toDF("id","name")
df.show()
输出:
| id|name|
+---+----+
|  1| brr|
|  2| hrr|
|  3| xxr|
+---+----+

4.从RDD转为dataframe,使用sparkSession对象的createDataFrame方法
需要先定义一个字段结构schema,把rdd套进schema里,从而得到dataframe并且指定字段类型和非空信息

val shema = StructType(List(StructField("id",IntegerType,nullable = false),StructField("name",StringType,nullable = true)))
val rdd = sc.parallelize(Seq(Row(1,"brr"),Row(2,"hrr"),Row(3,"xxr"))) #sc为已有的sparkContext对象
val df = sparkSession.createDataFrame(rdd,schema)
df.show()
输出:
| id|name|
+---+----+
|  1| brr|
|  2| hrr|
|  3| xxr|
+---+----+

5.通过调用sparkSession的read方法读文件得到dataframe
支持文件格式:csv format jdbc json load option options orc parquet schema table text textFile
读json文件

json内容:
{"id":1,"name":"brr"},
{"id":2,"name":"hrr"},
{"id":3,"name":"xxr"}

val df = spark.read.json(json_path)
df.show()
输出为
+---+----+
| id|name|
+---+----+
|  1| brr|
|  2| hrr|
|  3| xxr|
+---+----+

6.通过sparkSession的sql方法读hive表得到dataframe

hive xfy数据库rr表数据:
rr.id	rr.name
1	brr
2	hrr
3	xxr

val df = spark.sql("select * from xfy.rr")
df.show()
输出为
+---+----+
| id|name|
+---+----+
|  1| brr|
|  2| hrr|
|  3| xxr|
+---+----+

7.通过sparkSession的read方法读mysql表得到dataframe

mysql xfy数据库rr表数据:
rr.id	rr.name
1	brr
2	hrr
3	xxr

val url = "jdbc:mysql://localhost:3306/xfy"
val df = spark.read.format("jdbc").option("url",url).option("dbtable","rr").option("user","root").option("password","123456").load()
df.show()
输出为
+---+----+
| id|name|
+---+----+
|  1| brr|
|  2| hrr|
|  3| xxr|
+---+----+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值