web-dev-qa-db-ja.com

Pandas RDDへのデータフレーム

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の使用例を提供できる人はいますか?

12
kraster

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はいくつかの追加リソースを提供します。まず、これらを確認してください:

17
zero323