withColumn() 中的 PySpark list() 只能工作一次,然后 AssertionError: col 应该是 Column

2024-04-08

我有一个 DataFrame,其中有 6 个字符串列,名为“Spclty1”...“Spclty6”,另外 6 个字符串列名为“StartDt1”...“StartDt6”。我想将它们压缩并折叠成如下所示的列:[[Spclty1, StartDt1]...[Spclty6, StartDt6]]

我首先尝试将“Spclty”列折叠到如下列表中:

DF = DF.withColumn('Spclty', list(DF.select('Spclty1', 'Spclty2', 'Spclty3', 'Spclty4', 'Spclty5', 'Spclty6')))

我第一次执行它时,它起作用了,给了我一个名为“Spclty”的新列,其中包含诸如['014', '124', '547', '000', '000', '000'],正如预期的那样。

然后,我在脚本中添加了一行,对一组不同的 6 个字符串列(名为“StartDt1”...“StartDt6”)执行相同的操作:

DF = DF.withColumn('StartDt', list(DF.select('StartDt1', 'StartDt2', 'StartDt3', 'StartDt4', 'StartDt5', 'StartDt6'))))

这造成了AssertionError: col should be Column.

在我没有办法尝试之后,我再次尝试了原来的操作(作为健全性检查):

DF.withColumn('Spclty', list(DF.select('Spclty1', 'Spclty2', 'Spclty3', 'Spclty4', 'Spclty5', 'Spclty6'))).collect()

并得到如上所述的断言错误。

因此,最好理解为什么它只在第一次(仅)有效,但主要问题是:将列压缩到 Spark 中类似字典的元素集合的正确方法是什么?


.withColumn()需要一个列对象作为第二个参数,并且您正在提供一个列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

withColumn() 中的 PySpark list() 只能工作一次,然后 AssertionError: col 应该是 Column 的相关文章

随机推荐