scala - 在 Spark Scala 中合并
问题描述
我试图了解 Spark - scala 中是否有默认方法可以在合并中包含空字符串。
前-我有下面的DF-
val df2=Seq(
("","1"),
("null","15_20")
)toDF("c1","c2")
+----+-----+
| c1| c2|
+----+-----+
| | 1|
|null|15_20|
+----+-----+
以下代码仅适用于 NULL 值。但我也需要合并来处理空字符串。
df2.withColumn("FirstNonNullOrBlank",coalesce(col("c1"),col("c2")))show
+----+-----+-------------------+
| c1| c2|FirstNonNullOrBlank|
+----+-----+-------------------+
| | 1| |
|null|15_20| 15_20|
+----+-----+-------------------+
预期产出 -
+----+-----+-------------------+
| c1| c2|FirstNonNullOrBlank|
+----+-----+-------------------+
| | 1| 1 |
|null|15_20| 15_20|
+----+-----+-------------------+
这里最好的方法应该是什么?
解决方案
您需要一个辅助函数来“取消”这些记录:
def nullify(c: Column) = when(not (c==="" or c==="null"),c)
df2
.withColumn("FirstNonNullOrBlank", coalesce(
nullify(col("c1")),
nullify(col("c2")))
)
.show
+----+-----+-------------------+
| c1| c2|FirstNonNullOrBlank|
+----+-----+-------------------+
| | 1| 1|
|null|15_20| 15_20|
+----+-----+-------------------+
推荐阅读
- python - Using one pyaudio stream for both data reading and writing
- javascript - 使用开关拖放更改图像
- android - Refresh data from a network using LiveData
- arduino - " function was not declared in this scope" error when declaring a function in Arduino
- payment-gateway - 在 Android 中 - “无效的公钥通过” 实时错误
- ruby-on-rails - Rails 开放时间
- dc.js - 需要制作自定义reducer来扣除两个值
- web-services - 肥皂服务客户 DHL
- javascript - Change background color depend by value
- google-sheets - 如何比较两个(不相同的)选项卡(或工作表)以了解特定列中的差异