toDF() 不处理 RDD

Posted

技术标签:

【中文标题】toDF() 不处理 RDD【英文标题】:toDF() not handling RDD 【发布时间】:2016-02-16 19:42:01 【问题描述】:

我有一个名为 RowRDD 的 RDD。我只是想转换成 DataFrame。从我在互联网上从各个地方看到的示例中,我看到我应该尝试 RowRDD.toDF() 我收到错误:

value toDF is not a member of org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]

【问题讨论】:

【参考方案1】:

它不起作用,因为Row 不是Product 类型,并且createDataFrame 与单个RDD 参数一样只为RDD[A] 定义A <: Product

如果你想使用RDD[Row],你必须提供一个模式作为第二个参数。如果您考虑一下,这应该是显而易见的。 Row 只是 Any 的一个容器,因此它没有为架构推断提供足够的信息。

假设这与your previous question 中定义的RDD 相同,那么架构很容易生成:

import org.apache.spark.sql.types._
import org.apache.spark.rdd.RD

val rowRdd: RDD[Row] = ???
val schema = StructType(
  (1 to rowRdd.first.size).map(i => StructField(s"_$i", StringType, false))
)

val df = sqlContext.createDataFrame(rowRdd, schema)

【讨论】:

以上是关于toDF() 不处理 RDD的主要内容,如果未能解决你的问题,请参考以下文章

值 toDF 不是 org.apache.spark.rdd.RDD 的成员

将 rdd 转换为数据框:AttributeError: 'RDD' object has no attribute 'toDF' using PySpark

值 toDF 不是成员 org.apache.spark.rdd.RDD

如何使用 toDF() 将自定义 Java 类对象的 RDD 转换为 DataFrame?

如何使用用户定义的类和 toDF 将 RDD 转换为数据帧

错误:值 toDF 不是 org.apache.spark.rdd.RDD[org.apache.kafka.clients.consumer.ConsumerRecord[String,String