![](/img/trans.png)
[英]How to pass dataset column value to a function while using spark filter with scala?
[英]Filter Spark dataset using custom function in scala
我是Spark的新手,我试图从Spark数据集中过滤掉无效的记录。 我的数据集看起来像这样:
| Id | Curr| Col3 |
| 1 | USD | 1111 |
| 2 | CNY | 2222 |
| 3 | USD | 3333 |
| 1 | CNY | 4444 |
按照我的逻辑,每个ID都有一个有效的货币。 所以基本上它将是id->currency
的映射
val map = Map(1 -> "USD", 2 -> "CNY")
我想从数据集中过滤出ID与有效货币代码不对应的行。 因此,在执行过滤操作后,数据集应如下所示:
| Id | Curr| Col3 |
| 1 | USD | 1111 |
| 2 | CNY | 2222 |
我在这里的限制是我不能使用UDF。 有人可以帮我解决这个问题吗?
您可以在map
创建一个数据框,然后对原始数据框进行内部联接以对其进行过滤:
val map_df = map.toSeq.toDF("Id", "Curr")
// map_df: org.apache.spark.sql.DataFrame = [Id: int, Curr: string]
df.join(map_df, Seq("Id", "Curr")).show
+---+----+----+
| Id|Curr|Col3|
+---+----+----+
| 1| USD|1111|
| 2| CNY|2222|
+---+----+----+
val a = List((1,"USD",1111),(2,"CAN",2222),(3,"USD",4444),(1,"CAN",5555))
val b = Map(1 -> "USD",2 -> "CAN")
a.filter(x => b.keys.exists(_ == x._1)).filter(y => y._2 == b(y._1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.