【发布时间】:2016-08-23 17:24:24
【问题描述】:
我有两个数据集,如下所示。每个数据集的每一行都有“,”分隔的数字。
数据集 1
1,2,0,8,0
2,0,9,0,3
数据集 2
7,5,4,6,3
4,9,2,1,8
我必须用数据集 2 中的相应值替换第一个数据集的零。
所以结果应该是这样的
1,2,4,8,3
2,9,9,1,3
我用下面的代码替换了这些值。
val rdd1 = sc.textFile(dataset1).flatMap(l => l.split(","))
val rdd2 = sc.textFile(dataset2).flatMap(l => l.split(","))
val result = rdd1.zip(rdd2).map( x => if(x._1 == "0") x._2 else x._1)
我得到的输出格式为 RDD[String]。但我需要 RDD[Array[String]] 格式的输出,因为这种格式更适合我的进一步转换。
【问题讨论】:
-
你在寻找类似
val result = rdd1.zip(rdd2).map(x => if(x._1 == "0") Array(x._2) else Array(x._1))的东西吗? -
@AlexisC。不,rdd1 和 rdd2 的类型是 RDD[Array[String]]。所以代码中的 x._1 指的是数组
-
嗯,从您的 sn-p 中不清楚。拆分后您是平面映射,导致
RDD[String]和x._1 == "0";那么x._1是如何引用数组的呢?除非你想要一个带有 2 个数组的RDD[Array[String]](每行一个)? -
抱歉不是很清楚。我想要一个带有 2 个数组(每行一个)的 RDD[Array[String]] 类型的结果 RDD。但是,当我使用 flatMap 时,我编写的代码以 RDD[String] 格式给出了结果。
标签: scala apache-spark rdd