【问题标题】:List to DataFrame in pyspark列出到 pyspark 中的 DataFrame
【发布时间】:2018-01-16 22:21:02
【问题描述】:

谁能告诉我如何将包含字符串的列表转换为 pyspark 中的数据框。我正在使用 python 3.6 和 spark 2.2.1。我刚刚开始学习 Spark 环境,我的数据如下所示

my_data =[['apple','ball','ballon'],['cat','camel','james'],['none','focus','cake']]

现在,我想如下创建一个数据框

---------------------------------
|ID | words                     |
---------------------------------
 1  | ['apple','ball','ballon'] |
 2  | ['cat','camel','james']   |

我什至想添加数据中未关联的 ID 列

【问题讨论】:

    标签: pyspark pyspark-sql


    【解决方案1】:

    您可以将列表转换为 Row 对象列表,然后使用 spark.createDataFrame 从您的数据中推断架构:

    from pyspark.sql import Row
    R = Row('ID', 'words')
    
    # use enumerate to add the ID column
    spark.createDataFrame([R(i, x) for i, x in enumerate(my_data)]).show() 
    +---+--------------------+
    | ID|               words|
    +---+--------------------+
    |  0|[apple, ball, bal...|
    |  1| [cat, camel, james]|
    |  2| [none, focus, cake]|
    +---+--------------------+
    

    【讨论】:

    • 感谢您的回复.. 但是当我执行代码 Py4JJavaError:调用 o40.describe 时发生错误时出现以下错误。 :org.apache.spark.SparkException:作业因阶段失败而中止:阶段 2.0 中的任务 1 失败 1 次,最近一次失败:阶段 2.0 中丢失任务 1.0(TID 3,本地主机,执行程序驱动程序):org.apache.spark .api.python.PythonException:回溯(最近一次调用最后一次):文件“pyspark/worker.py”,第 123 行,在 main ("%d.%d" % sys.version_info[:2], version))
    • 尝试重启 pyspark shell。该错误似乎与代码无关。
    • 不是很棒。正是我正在寻找的
    【解决方案2】:

    试试这个 -

    data_array = []
    for i in range (0,len(my_data)) :
        data_array.extend([(i, my_data[i])])
    
    df = spark.createDataframe(data = data_array, schema = ["ID", "words"])
    
    df.show()
    

    【讨论】:

      【解决方案3】:

      试试这个——最简单的方法

        from pyspark.sql import *
        x = Row(utc_timestamp=utc, routine='routine name', message='your message')
        data = [x]
        df = sqlContext.createDataFrame(data) 
      

      【讨论】:

        【解决方案4】:

        简单的方法:

        my_data =[['apple','ball','ballon'],['cat','camel','james'],['none','focus','cake']]
        
        spark.sparkContext.parallelize(my_data).zipWithIndex() \
        toDF(["id", "words"]).show(truncate=False)
        
        +---------------------+-----+
        |id                   |words|
        +---------------------+-----+
        |[apple, ball, ballon]|0    |
        |[cat, camel, james]  |1    |
        |[none, focus, cake]  |2    |
        +---------------------+-----+
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-25
          • 1970-01-01
          • 2023-01-13
          相关资源
          最近更新 更多