apache-spark - 在 spark 中的加号 (+) 上拆分字符串列并修剪结果
问题描述
我想根据现有列的值生成一列。只要有加号,我们就想拆分并拾取列的第二部分,如果有任何空间,则进行修剪。
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
解决方案
该代码在您的 DataFrame 中col('col1')
返回name 。pyspark.sql.Column
"col1"
您收到错误消息:
TypeError: 'Column' object is not callable
因为您试图调用split
(and trim
) 作为此列上的方法,但不存在此类方法。
相反,您想调用函数pyspark.sql.functions.split()
并将传入pyspark.sql.functions.trim()
的Column
作为参数。
例如:
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|
#+-----------------------------------------------+----------------------+
to 的第二个参数split()
被视为正则表达式模式,因此+
必须转义。