首页 文章

将RDD转换为Dataframe Spark

提问于
浏览
2

如何将具有以下结构的RDD转换为scala中的数据帧

org.apache.spark.rdd.RDD[(Long, org.apache.spark.mllib.linalg.Vector)] = MapPartitionsRDD[42]

这里RDD的每一行包含索引 Long 和向量 org.apache.spark.mllib.linalg.Vector .

我想将 org.apache.spark.mllib.linalg.Vector 的每个组件放在一行数据帧的单独列中 .

1 回答

  • 1

    以下示例有效 . 为简洁起见,我假设矢量大小为10.您应该可以将其缩放到1000

    import org.apache.spark.mllib.linalg.Vectors
    val rdd = sc.parallelize(Seq((1L,Vectors.dense((1 to 10).map(_ * 1.0).toArray))))
    val df = rdd.map({case (a,b) => (a,b.toArray) }).toDF("c1", "c2")
    df.select(($"c1" +: (0 to 9).map(idx => $"c2"(idx) as "c" + (idx + 2)):_*)).show()  
    +---+---+---+---+---+---+---+---+---+---+----+
    | c1| c2| c3| c4| c5| c6| c7| c8| c9|c10| c11|
    +---+---+---+---+---+---+---+---+---+---+----+
    |  1|1.0|2.0|3.0|4.0|5.0|6.0|7.0|8.0|9.0|10.0|
    +---+---+---+---+---+---+---+---+---+---+----+
    

相关问题