【问题标题】:How can I convert a list of lists in a Dataframe in Pyspark, being each list the values of each attribute?如何在 Pyspark 的 Dataframe 中转换列表列表,每个列表都是每个属性的值?
【发布时间】:2018-04-04 02:23:25
【问题描述】:

我有一个类型列表:

[[1, 2, 3], ['A', 'B', 'C'], ['aa', 'bb', 'cc']]

每个列表都包含属性“A1”、“A2”和“A3”的值。

我想获取下一个数据框:

+----------+----------+----------+ 
| A1       | A2       | A3       |
+----------+----------+----------+ 
| 1        | A        | aa       |
+----------+----------+----------+ 
| 2        | B        | bb       |
+----------+----------+----------+ 
| 3        | C        | cc       |
+----------+----------+----------+ 

我该怎么做?

【问题讨论】:

    标签: python list dataframe attributes pyspark


    【解决方案1】:

    您可以创建一个将标题作为字段的行类,并使用zip 循环遍历列表行并为每一行构造一个行对象:

    lst = [[1, 2, 3], ['A', 'B', 'C'], ['aa', 'bb', 'cc']]
    
    from pyspark.sql import Row
    
    R = Row("A1", "A2", "A3")
    sc.parallelize([R(*r) for r in zip(*lst)]).toDF().show()
    +---+---+---+
    | A1| A2| A3|
    +---+---+---+
    |  1|  A| aa|
    |  2|  B| bb|
    |  3|  C| cc|
    +---+---+---+
    

    或者如果你安装了 pandas,先创建一个 pandas 数据框;您可以使用 spark.createDataFrame 直接从 pandas 数据帧创建 spark 数据帧:

    import pandas as pd
    headers = ['A1', 'A2', 'A3']
    
    pdf = pd.DataFrame.from_dict(dict(zip(headers, lst)))
    spark.createDataFrame(pdf).show()
    +---+---+---+
    | A1| A2| A3|
    +---+---+---+
    |  1|  A| aa|
    |  2|  B| bb|
    |  3|  C| cc|
    +---+---+---+
    

    【讨论】:

      【解决方案2】:
      from pyspark.sql import Row
      names=['A1', 'A2', 'A3']
      data=sc.parallelize(zip(*[[1, 2, 3], ['A', 'B', 'C'], ['aa', 'bb', 'cc']])).\
      map(lambda x: Row(**{names[i]: elt for i, elt in enumerate(x)})).toDF()
      

      【讨论】:

        猜你喜欢
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 2020-10-05
        • 1970-01-01
        • 2023-01-29
        • 1970-01-01
        • 1970-01-01
        • 2019-02-17
        相关资源
        最近更新 更多