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 不是 org.apache.spark.rdd.RDD[org.apache.kafka.clients.consumer.ConsumerRecord[String,String