如何使用Spark在Scala中返回多列键和值对

时间:2018-05-29 06:02:17

标签: scala apache-spark

我想将下面的RDD转换为Key Value Pairs,每个键都有两个值。 第一列应该是键,第二列和第三列应该是值。如何在scala中使用Case类来执行转换?

scala> input
res31: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[60] at rdd at <console>:35

scala> input.take(5).foreach(println)
[Ace,Ball,null]
[Kids,Kids,null]
[Hardware,Hardware,null]
[Market,Market,Markets]
[Adventure,Adventure,null]

预期的O / P: 我期待键值对很像Python字典。一个键将保存多个值,因此值将是一个元组。一旦我们有了键值对,基于键我应该能够提取值。

e.g

d = {key1: [val1, val2, val3....], key2: [valx, valy, valz, ...], ....}

d[key1][0]给出key1的第一个值

希望我能够清楚地表达我的要求

1 个答案:

答案 0 :(得分:0)

您可以使用Tuple2。假设您希望输出为:

(Ace, (Ball, null))
(Kids, (Kids, null))
..
(Adventure, (Adventure, null))

您可以尝试以下操作:

val output = input.map(x => Tuple2(x.getString(0), (x.getString(1), x.getString(2))))
output.take(5).foreach(println)