如何从pyspark数据框中选择特定列的列表(包含特殊字符)?

时间:2019-07-17 07:00:34

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我正在尝试从spark数据框中选择特定的列。

特定列的列表为:

required_cols = ['123ABC.PM','456DEF.PM']

Spark_df是给定格式:

'123ABC.PM', '54SWC.PM', '456DEF.PM', '154AS.LB'
23.5         34.5         400.7        100.3
25.4         37.6         401          100
and so on

我已经尝试过:

spark_df_new = spark_df.select(required_cols)

但是我遇到了错误:

"cannot resolve '`123ABC.PM`' given input columns: [123ABC.PM,54SWC.PM, 456DEF.PM,154AS.LB]
``

3 个答案:

答案 0 :(得分:0)

使用倒钩`char

required_cols = [`123ABC.PM`,`456DEF.PM`]

答案 1 :(得分:0)

作为解决方法,您可以尝试以下方法。

将带有特殊字符的旧列名替换为新列,然后进行选择。

val columns = df.columns

val regex = """[+._,' ]+"""
val replacingColumns = columns.map(regex.r.replaceAllIn(_, "_"))

val resultDF = replacingColumns.zip(columns).foldLeft(df){(tempdf, name) => tempdf.withColumnRenamed(name._2, name._1)}

resultDF.show(false)

df
  .columns
  .foldLeft(df){(newdf, colname) =>
    newdf.withColumnRenamed(colname, colname.replace(" ", "_").replace(".", "_"))
  }

来源: SO

答案 2 :(得分:0)

您需要使用*。
*将列表中的元素一一传递给选择项。

spark_df_new = spark_df.select(*required_cols)