【问题标题】:Create DataFrame from list of tuples using pyspark使用 pyspark 从元组列表创建 DataFrame
【发布时间】:2016-05-02 06:31:16
【问题描述】:

我正在使用 simple-salesforce 包从 SFDC 提取数据。 我正在使用 Python3 编写脚本和 Spark 1.5.2。

我创建了一个包含以下数据的rdd:

[('Id', 'a0w1a0000003xB1A'), ('PackSize', 1.0), ('Name', 'A')]
[('Id', 'a0w1a0000003xAAI'), ('PackSize', 1.0), ('Name', 'B')]
[('Id', 'a0w1a00000xB3AAI'), ('PackSize', 30.0), ('Name', 'C')]
...

此数据在名为 v_rdd 的 RDD 中

我的架构如下所示:

StructType(List(StructField(Id,StringType,true),StructField(PackSize,StringType,true),StructField(Name,StringType,true)))

我正在尝试用这个 RDD 创建 DataFrame:

sqlDataFrame = sqlContext.createDataFrame(v_rdd, schema)

我打印我的 DataFrame:

sqlDataFrame.printSchema()

并获得以下信息:

+--------------------+--------------------+--------------------+
|                  Id|  PackSize|                          Name|
+--------------------+--------------------+--------------------+
|[Ljava.lang.Objec...|[Ljava.lang.Objec...|[Ljava.lang.Objec...|
|[Ljava.lang.Objec...|[Ljava.lang.Objec...|[Ljava.lang.Objec...|
|[Ljava.lang.Objec...|[Ljava.lang.Objec...|[Ljava.lang.Objec...|

我希望看到实际数据,如下所示:

+------------------+------------------+--------------------+
|                Id|PackSize|                          Name|
+------------------+------------------+--------------------+
|a0w1a0000003xB1A  |               1.0|       A            |
|a0w1a0000003xAAI  |               1.0|       B            |
|a0w1a00000xB3AAI  |              30.0|       C            |

你能帮我找出我在这里做错了什么吗?

我的 Python 脚本很长,我不确定人们筛选它是否方便,所以我只发布了我遇到问题的部分。

提前致谢!

【问题讨论】:

    标签: python-3.x pyspark spark-dataframe


    【解决方案1】:

    您好,下次您能否提供一个可行的示例。那会更容易。

    RDD 的呈现方式对于创建 DataFrame 来说基本上很奇怪。这就是根据 Spark 文档创建 DF 的方式。

    >>> l = [('Alice', 1)]
    >>> sqlContext.createDataFrame(l).collect()
    [Row(_1=u'Alice', _2=1)]
    >>> sqlContext.createDataFrame(l, ['name', 'age']).collect()
    [Row(name=u'Alice', age=1)]
    

    所以关于你的例子,你可以像这样创建你想要的输出:

    # Your data at the moment
    data = sc.parallelize([ 
    [('Id', 'a0w1a0000003xB1A'), ('PackSize', 1.0), ('Name', 'A')],
    [('Id', 'a0w1a0000003xAAI'), ('PackSize', 1.0), ('Name', 'B')],
    [('Id', 'a0w1a00000xB3AAI'), ('PackSize', 30.0), ('Name', 'C')]
        ])
    # Convert to tuple
    data_converted = data.map(lambda x: (x[0][1], x[1][1], x[2][1]))
    
    # Define schema
    schema = StructType([
        StructField("Id", StringType(), True),
        StructField("Packsize", StringType(), True),
        StructField("Name", StringType(), True)
    ])
    
    # Create dataframe
    DF = sqlContext.createDataFrame(data_converted, schema)
    
    # Output
    DF.show()
    +----------------+--------+----+
    |              Id|Packsize|Name|
    +----------------+--------+----+
    |a0w1a0000003xB1A|     1.0|   A|
    |a0w1a0000003xAAI|     1.0|   B|
    |a0w1a00000xB3AAI|    30.0|   C|
    +----------------+--------+----+
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-07-01
      • 2020-10-15
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2018-12-08
      • 1970-01-01
      • 2013-05-29
      相关资源
      最近更新 更多