2016-01-25 21 views
5

私はsimple-salesforceパッケージを使用してSFDCから抽出したデータを使用しています。 私はスクリプトとSpark 1.5.2のためにPython3を使用しています。私は、データフレームを作成しようとしていますpysparkを使用してタプルのリストからDataFrameを作成

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

:私のスキーマは、このようになります

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

このデータはRDDである

v_rdd

と呼ば:

私は、次のデータを含むRDDを作成しましたが、このRDDから:

sqlDataFrame = sqlContext.createDataFrame(v_rdd, schema) 

私は私のデータフレームを印刷:

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スクリプトは長いですが、私は人々がそれを見分けるのが便利だろうとは確信していませんので、私は問題を抱えている部分だけを投稿しました。

事前にお問い合わせいただきありがとうございます。

答えて

12

次回は実例を紹介してもらえますか?それはもっと簡単だろう。

あなたの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| 
+----------------+--------+----+ 

が、これは

を役に立てば幸い
関連する問題