加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何自动化StructType创建以将RDD传递给DataFrame

发布时间:2020-12-16 18:50:33 所属栏目:安全 来源:网络整理
导读:我想将RDD保存为镶木地板文件.为此,我将RDD传递给DataFrame,然后使用结构将DataFrame保存为镶木地板文件: val aStruct = new StructType(Array(StructField("id",StringType,nullable = true),StructField("role",nullable = true))) val newDF = sqlContex
我想将RDD保存为镶木地板文件.为此,我将RDD传递给DataFrame,然后使用结构将DataFrame保存为镶木地板文件:

val aStruct = new StructType(Array(StructField("id",StringType,nullable = true),StructField("role",nullable = true)))
    val newDF = sqlContext.createDataFrame(filtered,aStruct)

问题是如何为所有列自动创建一个Struct,假设它们都是StringType?另外,nullable = true是什么意思?这是否意味着所有空值都将被Null取代?

解决方法

为什么不使用内置的toDF?

scala> val myRDD = sc.parallelize(Seq(("1","roleA"),("2","roleB"),("3","roleC")))
myRDD: org.apache.spark.rdd.RDD[(String,String)] = ParallelCollectionRDD[60] at parallelize at <console>:27

scala> val colNames = List("id","role")
colNames: List[String] = List(id,role)

scala> val myDF = myRDD.toDF(colNames: _*)
myDF: org.apache.spark.sql.DataFrame = [id: string,role: string]

scala> myDF.show
+---+-----+
| id| role|
+---+-----+
|  1|roleA|
|  2|roleB|
|  3|roleC|
+---+-----+

scala> myDF.printSchema
root
 |-- id: string (nullable = true)
 |-- role: string (nullable = true)

scala> myDF.write.save("myDF.parquet")

nullable = true只表示指定的列可以包含空值(这对于通常没有空值的int列很有用–Innt没有NA或null).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读