scala - 如何将基于案例类的 RDD 转换为 DataFrame?

标签 scala apache-spark dataframe apache-spark-sql rdd

Spark documentation展示了如何从 RDD 创建 DataFrame,使用 Scala 案例类来推断模式。我正在尝试使用 sqlContext.createDataFrame(RDD, CaseClass) 重现这个概念,但我的 DataFrame 最终为空。这是我的 Scala 代码:

// sc is the SparkContext, while sqlContext is the SQLContext.

// Define the case class and raw data
case class Dog(name: String)
val data = Array(
    Dog("Rex"),
    Dog("Fido")
)

// Create an RDD from the raw data
val dogRDD = sc.parallelize(data)

// Print the RDD for debugging (this works, shows 2 dogs)
dogRDD.collect().foreach(println)

// Create a DataFrame from the RDD
val dogDF = sqlContext.createDataFrame(dogRDD, classOf[Dog])

// Print the DataFrame for debugging (this fails, shows 0 dogs)
dogDF.show()

我看到的输出是:
Dog(Rex)
Dog(Fido)
++
||
++
||
||
++

我错过了什么?

谢谢!

最佳答案

你所需要的只是

val dogDF = sqlContext.createDataFrame(dogRDD)

第二个参数是 Java API 的一部分,并期望您遵循 Java bean 约定(getter/setter)。您的案例类不遵循此约定,因此未检测到任何属性,这会导致没有列的空 DataFrame。

关于scala - 如何将基于案例类的 RDD 转换为 DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37004352/

相关文章:

postgresql - Play Framework 中带有 Postgres 的 Slick 代码生成器

scala - 十六进制文字、编译器错误或写得不好的规范?

scala - 将 emacs 连接到远程 ensime 服务器

python - 如何查找 Pyspark 中列中值最大的行名称

python - Pandas - 逗号分隔行中的每个字符串在数据框中出现的频率

scala - 如何从 Scala 调用重载的 Java 可变参数方法?

scala - Spark清理shuffle溢出到磁盘

python - 如何让 PySpark 在内存不足之前将中间结果写入磁盘?

替换数据框 R 列中的字符

r - 如何从 rgbif 中的搜索中保存出现数据