删除 Spark 数据框中的空格时出错 - PySpark

Posted

技术标签:

【中文标题】删除 Spark 数据框中的空格时出错 - PySpark【英文标题】:Error while removing empty spaces in Spark dataframe - PySpark 【发布时间】:2020-05-12 15:34:37 【问题描述】:

我正在将 csv 文件读入 spark 数据框。 csv 在许多列中有空格“”,我想删除这些空格。 csv 中有 500 列,所以我不能在我的代码中手动指定列

样本数据:

  ADVANCE_TYPE  CHNG_DT    BU_IN
     A          20190718    1
                20190728    2 
                20190714     
     B          20190705     
                20190724    4 

代码:

    from pyspark.sql.functions import col,when,regexp_replace,trim

    df_csv = spark.read.options(header='true').options(delimiter=',').options(inferSchema='true').options(nullValue="None").csv("test41.csv")  


    for col_name in df_csv.columns:
       df_csv = df_csv.select(trim(col(col_name)))

但这些代码并没有删除空格。请帮忙!

【问题讨论】:

【参考方案1】:

您可以使用 list comprehension 对所有必需的列应用 trim

Example:

df=spark.createDataFrame([("   ","12343","   ","9  ","   0")])

#finding length of each column
expr=[length(col(col_name)).name('length'+ col_name) for col_name in df.columns]

df.select(expr).show()
#+--------+--------+--------+--------+--------+
#|length_1|length_2|length_3|length_4|length_5|
#+--------+--------+--------+--------+--------+
#|       3|       5|       3|       3|       4|
#+--------+--------+--------+--------+--------+

#trim on all the df columns
expr=[trim(col(col_name)).name(col_name) for col_name in df.columns]

df1=df.select(expr)
df1.show()
#+---+-----+---+---+---+
#| _1|   _2| _3| _4| _5|
#+---+-----+---+---+---+
#|   |12343|   |  9|  0|
#+---+-----+---+---+---+

#length on df1 columns
expr=[length(col(col_name)).name('length'+ col_name) for col_name in df.columns]
df1.select(expr).show()
#+--------+--------+--------+--------+--------+
#|length_1|length_2|length_3|length_4|length_5|
#+--------+--------+--------+--------+--------+
#|       0|       5|       0|       1|       1|
#+--------+--------+--------+--------+--------+

【讨论】:

以上是关于删除 Spark 数据框中的空格时出错 - PySpark的主要内容,如果未能解决你的问题,请参考以下文章

Spark基于其他数据框中的列对数据框中的列进行重复数据删除

键入文本时在运行时从文本框中删除空格

根据条件从 spark 数据框中删除行

如何删除 Spark 表列中的空格(Pyspark)

无法从 spark scala 中的列名中删除空格

将前导零添加到 Spark 数据框中的列 [重复]