我在df
中有两列,我想根据一些条件转换它们的一些值。这些列是collect_set
aggregations
的结果,所以我可以选择预先应用一些转换,而不需要再次分解。
更具体地说,让我们假设Dataframe看起来像这个表:
df = [
(1,["0","1","2"],["10"]),
(2,["0"],["20"]),
(3,["3"],[null])
]
我想把它转换成这样:
1.如果arr1列有多于1个元素,如果存在,则删除'0'。如果'0'是唯一的元素,则保留它。
1.如果arr2没有元素,则向其传递默认值。
我尝试将size(col1)
应用于这些列,但我再次得到Column not iterable error
. exploding
数组和collecting
它们的sets
它们的选项出于性能原因对我来说真的不是一个选项,所以我必须事先有创造性,或者以某种方式直接将转换应用于数组,但以一种成本有效的方式。
话虽如此,希望的结果将是:
df = [
(1,["1","2"],["10"]),
(2,["0"],["20"]),
(3,["3"],["default_value"])
]
排序并不重要
1条答案
按热度按时间nnvyjq4y1#
使用**
size,higher
**order数组函数过滤掉数组元素中的0,而不进行分解。一米一米一