我有一个用例,要连接 Dataframe A和 Dataframe B,并根据when条件选择属性。
A.join(B, condition, "left")
.select (when(A.template == "some_value", B.new_value)
.when(A.template == "some_value1", B.new_value1)
.when(A.template == "some_value2", B.new_value2)
.otherwise(B.some_value3).alias("new_value")
)
我有25个when条件,我想让它成为map的一部分,而不是select语句的一部分,有办法做到吗?
我尝试使用UDF和map_from_arrays,但是不确定如何指定从 Dataframe B选择属性。
B[my_map.getItem(A.rate_template)].alias("new_value")
1条答案
按热度按时间acruukt91#
如果您使用“left-semi”和标记所需条件的新列,可能会更容易。此外,使用
pyspark.sql.functions import transform, transform_values, transform_keys
可能是替代UDF的另一种选择(不惜任何代价避免它。如果它们损坏,则很难理解原因和调试)您能否提供一些您正在连接的数据框的示例?