考虑Hive表 tbl
带列 aid
以及 bid
```
| aid | bid |
| | 12 |
| 24 | 13 |
| 18 | 3 |
| | 7 |
要求是什么时候 `aid` 为null或空字符串, `aid` 应被的值覆盖 `bid` ```
| aid | bid |
---------------
| 12 | 12 |
| 24 | 13 |
| 18 | 3 |
| 7 | 7 |
---------------
代码很简单
val df01 = spark.sql("select * from db.tbl")
val df02 = df01.withColumn("aid", when(col("aid").isNull || col("aid") <=> "", col("bid")) otherwise(col("aid")))
跑进去的时候 spark-shell
, df02.show
如上表所示显示正确的数据
问题是何时将数据写回配置单元
df02.write
.format("orc")
.mode("Overwrite")
.option("header", "false")
.option("orc.compress", "snappy")
.insertInto(tbl)
没有错误,但当我验证数据时
select * from db.tbl where aid is null or aid= '' limit 10;
我仍然可以看到查询返回的多行aid为null
如果以前像上面的例子一样更新列值,如何将数据覆盖回配置单元?
1条答案
按热度按时间n9vozmp41#
我想试试这个