【问题标题】:How to convert all the contents of a list to individual strings to pass as a parameter in dataframe.select()?如何将列表的所有内容转换为单个字符串以作为 dataframe.select() 中的参数传递?
【发布时间】:2021-03-01 19:31:32
【问题描述】:

我的要求是将所有列名的列表作为参数传递给dataframe.select(columns)

  1. 首先我使用dataframe.columns 来获取我的列表 所有的列。我将其存储为list1=(dataframe.columns)

  2. 其次,我使用 .join 来转换我的 字符串中的列列表,例如 - (strList1 = "','".join(list1)),它给了我以下输出

    col1','col2','col3','col4

    如您所见,在字符串的开头和结尾处缺少一些单引号

  3. 为了纠正strList1,我使用 f-string 格式如下 - strList2 = f"{strList1}'"这给了我以下输出

    'col1','col2','col3','col4'

主要问题:

当您将strList2 作为dataframe.select(strList2) 中的参数传递给我时,出现以下错误

Py4JJavaError:调用 o5813.select 时出错。 : org.apache.spark.sql.AnalysisException:无法解析 '反引号col1','col2','col3','col4'反引号' 给定输入列:[ col1,col2,db.table.col4, db.table.col3];; '项目 ['col1','col2','col3','col4']

注意 - 在 col1 之前和 col4 之后有一个反引号

我不明白为什么 select 函数没有采用正确的字符串值/变量 (strList2)

【问题讨论】:

    标签: python list apache-spark pyspark


    【解决方案1】:

    您正在将字符串 "'col1','col2','col3','col4'" 传递给 df.select。没有这样的列称为"'col1','col2','col3','col4'",因此df.select("'col1','col2','col3','col4'") 将导致错误。

    您需要做的是将列名字符串列表传递给df.select,而不是传递该字符串。 df.columns 已经是那个列表(例如['col1', 'col2']),所以你可以简单地做df.select(df.columns)

    其实,如果你只是想显示所有列,你可以做df.select('*')

    【讨论】:

    • 嘿@mck 感谢您的帮助,基本上当我将列表作为参数发送时,它会抛出此错误 - TypeError: Invalid argument, not a string or column: ['col1', 'col2' , 'col3', 'col4'] 类型为 。对于列文字,使用“lit”、“array”、“struct”或“create_map”函数。但是你给出的第二个答案 - df.select('*') 就像一个魅力。谢谢!
    • 啊,您可能使用的是旧版本的 Spark。然后你也可以尝试df.select(*df.columns) 来解压列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2022-11-13
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多