2016-02-16 58 views
1

我有一个称为RowRDD的行的RDD。我只是试图转换成DataFrame。从我所看到的从不同的地方在互联网上的例子,我看到我shoudl试图RowRDD.toDF()我收到错误:toDF()不处理RDD

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

回答

5

它不起作用,因为不一个Product类型和createDataFrame与作为单个RDD自变量只定义为RDD[A]其中A <: Product

如果你想使用RDD[Row]你必须提供一个模式作为第二个参数。如果你认为它应该是显而易见的。 仅仅是Any的一个容器,因此它不能提供足够的模式推理信息。

假设这是相同的RDDyour previous question然后架构中定义是很容易产生:

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)