我有一个 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 中类似字典的元素集合的正确方法是什么?