【发布时间】:2021-04-14 16:16:53
【问题描述】:
我正在寻找(做了一些没有成功的测试)在不使用 UDF 的情况下从 case 语句返回一个元组 StructType,有什么办法吗?
用例是:我们有 2 列依赖于 CASE 表达式中的相同条件,因此我们看到 2 个选项:
- 两次写入相同的条件,但返回不同的列(不需要)
- 编写一次条件,但在每个 WHEN 上返回 2 个值,这可以通过我们随后拆分的元组来实现。
我知道它可以使用 UDF 来完成,但我们避免了 UDF,因为它被 spark 视为黑盒,因此它们不可优化,所以问题是:有没有办法让 CASE 语句返回多个值而不使用 UDFS?
类似于:
df = df.withColumn("tuple", expr(
"CASE WHEN <condition 1> THEN (value1,value2)
WHEN <condition 2> THEN (value3,value4)
ELSE (value5,value6)
"))
df = df.withColumn("col1",col("tuple")[0])
df = df.withColumn("col2",col("tuple")[1])
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql