我正在使用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做同样的事情而陷入最后一部分。
答案 0 :(得分:3)
您只需将Row
转换为Seq
:
convRDD.flatMap(r => r.toSeq.zipWithIndex)
这里要注意的重要一点是提取类型信息变得棘手。 Row.toSeq
返回Seq[Any]
,结果RDD
为RDD[(Any, Int)]
。