gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:19:33 25 4
gpt4 key购买 nike

我要保存 RDD作为 Parquet 文件。为此,我将 RDD 传递给 DataFrame然后我使用一个结构来保存 DataFrame作为 Parquet 文件:

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

问题是如何创建 aStruct假设所有列都是 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只是意味着指定的列可以包含 null值(这对于通常没有 int 值的 null 列特别有用 - Int 没有 NAnull )。

关于scala - 如何自动创建 StructType 以将 RDD 传递给 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com