toDF() 不处理 RDD
toDF() not handling RDD
我有一个名为 RowRDD 的行 RDD。我只是想转换成 DataFrame。从我在互联网上从不同地方看到的例子,我看到我应该尝试 RowRDD.toDF() 我收到错误:
value toDF is not a member of org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]
它不起作用,因为 Row
不是 Product
类型,并且具有单个 RDD
参数的 createDataFrame
仅为 RDD[A]
定义,其中A <: Product
.
如果您想使用 RDD[Row]
,您必须提供一个模式作为第二个参数。如果您考虑一下,那应该是显而易见的。 Row
只是 Any
的一个容器,因此它没有为模式推断提供足够的信息。
假设这与 中定义的 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)
我有一个名为 RowRDD 的行 RDD。我只是想转换成 DataFrame。从我在互联网上从不同地方看到的例子,我看到我应该尝试 RowRDD.toDF() 我收到错误:
value toDF is not a member of org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]
它不起作用,因为 Row
不是 Product
类型,并且具有单个 RDD
参数的 createDataFrame
仅为 RDD[A]
定义,其中A <: Product
.
如果您想使用 RDD[Row]
,您必须提供一个模式作为第二个参数。如果您考虑一下,那应该是显而易见的。 Row
只是 Any
的一个容器,因此它没有为模式推断提供足够的信息。
假设这与 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)