Pandas DataFrameをRDDに変換できますか?
if isinstance(data2, pd.DataFrame):
print 'is Dataframe'
else:
print 'is NOT Dataframe'
データフレームです
.rddを使用しようとしたときの出力は次のとおりです
dataRDD = data2.rdd
print dataRDD
AttributeError Traceback (most recent call last)
<ipython-input-56-7a9188b07317> in <module>()
----> 1 dataRDD = data2.rdd
2 print dataRDD
/usr/lib64/python2.7/site-packages/pandas/core/generic.pyc in __getattr__(self, name)
2148 return self[name]
2149 raise AttributeError("'%s' object has no attribute '%s'" %
-> 2150 (type(self).__name__, name))
2151
2152 def __setattr__(self, name, value):
AttributeError: 'DataFrame' object has no attribute 'rdd'
Pandas Pandasのすべての関数がSparkで使用できるかどうかわからないため、sqlContextではなくDF Dataframeを使用して構築したいと思います。これが不可能な場合、Spark DFの使用例を提供できる人はいますか?
Pandas DataframeをRDDに変換できますか?
ええ、そうです。 Pandasデータフレーム
_pdDF = pd.DataFrame([("foo", 1), ("bar", 2)], columns=("k", "v"))
print pdDF
## k v
## 0 foo 1
## 1 bar 2
_
Sparkデータフレームに変換できます。
_spDF = sqlContext.createDataFrame(pdDF)
spDF.show()
## +---+-+
## | k|v|
## +---+-+
## |foo|1|
## |bar|2|
## +---+-+
_
その後、基礎となるRDDに簡単にアクセスできます
_spDF.rdd.first()
## Row(k=u'foo', v=1)
_
それでも、ここでは間違った考えがあると思います。 Pandasデータフレームはローカルデータ構造です。データフレームはドライバ上でローカルに保存および処理されます。データ分散や並列処理は行われず、RDDを使用しません(したがって、rdd
属性)Spark DataFrameとは異なり、ランダムアクセス機能を提供します。
Spark DataFrameは、裏でRDDを使用する分散データ構造です。生のSQL(_sqlContext.sql
_)またはSQLのようなAPI(df.where(col("foo") == "bar").groupBy(col("bar")).agg(sum(col("foobar")))
)を使用してアクセスできます。ランダムアクセスはなく、不変です(Pandas inplace
)と同等ではありません)すべての変換は新しいDataFrameを返します。
これが不可能な場合、Spark DFの使用例を提供できる人はいますか?
あんまり。 SOについては、これは広範にわたるトピックです。 Sparkには非常に優れたドキュメントがあり、Databricksはいくつかの追加リソースを提供します。まず、これらを確認してください: