2016-02-16 81 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)