我想根据现有列的值生成列。在有加号的地方,我们想拆开并拾取列的第二部分,如果有任何空间,则要修剪。
df = spark.sql("select '10/35/70/25% T4Max-300 + 20/45/80/25% T4Max-400' as col1")
df1 = df.withColumn("newcol",col('col1').split("+")[1].strip())
获取错误TypeError: 'Column' object is not callable
预期输出是20/45/80/25% T4Max-400
代码col('col1')
用名称"col1"
返回数据框中的pyspark.sql.Column
。
您正在遇到错误:
TypeError: 'Column' object is not callable
因为您试图将split
(和trim
)称为此列上的方法,但不存在此类方法。
相反,您要以Column
作为参数来调用函数pyspark.sql.functions.split()
和pyspark.sql.functions.trim()
。
例如:
df1 = df.withColumn(
"newcol",
f.trim(
f.split(f.col('col1'), r"+")[1]
)
)
df1.show(truncate=False)
#+-----------------------------------------------+----------------------+
#|col1 |newcol |
#+-----------------------------------------------+----------------------+
#|10/35/70/25% T4Max-300 + 20/45/80/25% T4Max-400|20/45/80/25% T4Max-400|
#+-----------------------------------------------+----------------------+
split()
的第二个论点被视为正则表达模式,因此必须逃脱+
。