首页 > 解决方案 > 在 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

标签: apache-sparkpysparkapache-spark-sql

解决方案


该代码在您的 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()被视为正则表达式模式,因此+必须转义。


推荐阅读