Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 从联接的RDD中删除选项类型_Scala_Join_Int_Rdd - Fatal编程技术网

Scala 从联接的RDD中删除选项类型

Scala 从联接的RDD中删除选项类型,scala,join,int,rdd,Scala,Join,Int,Rdd,有两个RDD val pairRDD1 = sc.parallelize(List( ("cat",2), ("girl", 5), ("book", 4),("Tom", 12))) val pairRDD2 = sc.parallelize(List( ("cat",2), ("cup", 5), ("mouse", 4),("girl", 12))) 然后我会做这个连接操作 val kk = pairRDD1.fullOuterJoin(pairRDD2).collect 它表现为:

有两个RDD

val pairRDD1 = sc.parallelize(List( ("cat",2), ("girl", 5), ("book", 4),("Tom", 12)))
val pairRDD2 = sc.parallelize(List( ("cat",2), ("cup", 5), ("mouse", 4),("girl", 12)))
然后我会做这个连接操作

val kk = pairRDD1.fullOuterJoin(pairRDD2).collect
它表现为:

kk: Array[(String, (Option[Int], Option[Int]))] = Array((book,(Some(4),None)), (Tom,(Some(12),None)), (girl,(Some(5),Some(12))), (mouse,(None,Some(4))), (cup,(None,Some(5))), (cat,(Some(2),Some(2))))

如果我想用0填充NONE并将
选项[int]
转换为
int
。我应该编码什么?谢谢

您可以在
kk
上使用
mapValues
,如下所示(注意这是在
收集之前):

您可能必须在
RDD
中收集
之前执行此操作,否则您可以执行以下操作:

kk.map { case (k, pair) => (k, (pair._1.getOrElse(0), pair._2.getOrElse(0))) }

根据第一个答案中的commnets,如果您可以使用数据帧,那么可以使用任意列数的数据帧

val ss = SparkSession.builder().master("local[*]").getOrCreate()
    val sc = ss.sparkContext

    import ss.implicits._

    val pairRDD1 = sc.parallelize(List(("cat", 2,9999), ("girl", 5,8888), ("book", 4,9999), ("Tom", 12,6666)))
    val pairRDD2 = sc.parallelize(List(("cat", 2,9999), ("cup", 5,7777), ("mouse", 4,3333), ("girl", 12,1111)))

    val df1 = pairRDD1.toDF
    val df2 = pairRDD2.toDF

    val joined = df1.join(df2, df1.col("_1") === df2.col("_1"),"fullouter")
    joined.show()
此处
\u 1、\u 2
e.t.c是Spark提供的默认列名。但是,如果你想拥有专有名称,你可以随意更改

结果:

+----+----+----+-----+----+----+
|  _1|  _2|  _3|   _1|  _2|  _3|
+----+----+----+-----+----+----+
|girl|   5|8888| girl|  12|1111|
| Tom|  12|6666| null|null|null|
| cat|   2|9999|  cat|   2|9999|
|null|null|null|  cup|   5|7777|
|null|null|null|mouse|   4|3333|
|book|   4|9999| null|null|null|
+----+----+----+-----+----+----+

如果pairdd1有三个元素是这样的:val pairdd1=sc.parallelize(List((“cat”,2,0.1),(“girl”,5,0.3),(“book”,4,0.2),(“Tom”,12.0.5)),那么我应该如何编码?那么,您可以使用
。\u 3
访问第三个元素,也可以使用
getOrElse
+----+----+----+-----+----+----+
|  _1|  _2|  _3|   _1|  _2|  _3|
+----+----+----+-----+----+----+
|girl|   5|8888| girl|  12|1111|
| Tom|  12|6666| null|null|null|
| cat|   2|9999|  cat|   2|9999|
|null|null|null|  cup|   5|7777|
|null|null|null|mouse|   4|3333|
|book|   4|9999| null|null|null|
+----+----+----+-----+----+----+