Spark DataFrame zipWithIndex

时间:2015-07-21 15:48:19

标签: scala apache-spark apache-spark-sql

我正在使用DataFrame来读取.parquet文件,而不是将它们转换为rdd以执行我想要对它们执行的正常处理。

所以我有我的档案:

val dataSplit = sqlContext.parquetFile("input.parquet")
val convRDD = dataSplit.rdd 
val columnIndex = convRDD.flatMap(r => r.zipWithIndex)

即使我从数据帧转换为RDD,我也会收到以下错误:

  

:26:错误:值zipWithIndex不是。的成员   org.apache.spark.sql.Row

任何人都知道如何做我想做的事情,主要是试图获取值和列索引。

我在想这样的事情:

val dataSplit = sqlContext.parquetFile(inputVal.toString)
val schema = dataSplit.schema
val columnIndex = dataSplit.flatMap(r => 0 until schema.length

但是因为不确定如何对zipWithIndex做同样的事情而陷入最后一部分。

1 个答案:

答案 0 :(得分:3)

您只需将Row转换为Seq

即可
convRDD.flatMap(r => r.toSeq.zipWithIndex)

这里要注意的重要一点是提取类型信息变得棘手。 Row.toSeq返回Seq[Any],结果RDDRDD[(Any, Int)]