【发布时间】:2018-11-07 16:36:57
【问题描述】:
我想将下面的 RDD 转换为键值对,每个键都有两个值。 第一列应该是键,第二列和第三列应该是值。如何使用 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 字典的键值对。一个键将保存多个值,因此这些值将是一个元组。一旦我们有了键值对,基于键 i 应该能够提取值。
例如
d = {key1: [val1, val2, val3....], key2: [valx, valy, valz, ...], ....}
d[key1][0]给出key1的第一个值
希望我能清楚地表达我的要求
【问题讨论】:
-
你能分享你的预期输出吗?
-
@RameshMaharjan 更新了我的问题
-
你为什么不坚持使用数据框?
-
@RameshMaharjan 我对 Dataframes 也没有任何问题。但我真的不使用任何 SparkSQL 来做到这一点。将其视为 3 列 DF,其中第 1 列是键,接下来 2 列是值,如果将键作为输入字符串,我需要根据需要使用第一个值或第二个值。
-
所以你的意思是,如果提供了 Ace,那么你希望 Ball 作为第一个值,而 null 作为第二个值?
标签: scala apache-spark