Spark:将 RDD[(Long, Array[Double])] 转换为 RDD[(Long, Long, Double)]

Posted

技术标签:

【中文标题】Spark:将 RDD[(Long, Array[Double])] 转换为 RDD[(Long, Long, Double)]【英文标题】:Spark: Converting RDD[(Long, Array[Double])] to RDD[(Long, Long, Double)] 【发布时间】:2015-12-16 08:15:29 【问题描述】:

我有一个 RDD,每个条目的格式为(Long,Array[Double])。例如:

    val A = sc.parallelize( [(0, [5.0, 8.3]), (1, [4.2, 1.2])] )

我想将 A 转换为形式:

    [(0, 0, 5.0), (0, 1, 8.3), (1, 0, 4.2), (1, 1, 1.2)],

元组中的第二个元素是数组中值的索引。

【问题讨论】:

【参考方案1】:

试试这个:

A.flatMap  case (first, dbls) => dbls.zipWithIndex.map  case (dbl, ix) => (first, ix.toLong, dbl)  

【讨论】:

【参考方案2】:

你可以这样做:

A.flatMap case (v, arr) => arr.zipWithIndex.map case (a, i) => (v, i, a)

【讨论】:

以上是关于Spark:将 RDD[(Long, Array[Double])] 转换为 RDD[(Long, Long, Double)]的主要内容,如果未能解决你的问题,请参考以下文章

将 RDD 转换为 Dataframe Spark

来自 RDD 映射的 Spark Scala 序列化错误

Spark RDD

将带有数组的 RDD 转换为 DataFrame

将包含 BigInt 的 RDD 转换为 Spark Dataframe

Learning Spark——RDD常用操作