web-dev-qa-db-ja.com

Spark DataFrameメソッド `toPandas`は実際に何をしていますか?

私はSpark-DataFrame APIの初心者です。

このコードを使用して、CSVをタブ区切りでSpark Dataframeにロードします

lines = sc.textFile('tail5.csv')
parts = lines.map(lambda l : l.strip().split('\t'))
fnames = *some name list*
schemaData = StructType([StructField(fname, StringType(), True) for fname in fnames])
ddf = sqlContext.createDataFrame(parts,schemaData)

Spark=新しいファイルからDataFrameを作成し、組み込みメソッドtoPandas()を使用して、pandasに変換します。

  • Pandasオブジェクトをローカルメモリに保存しますか?
  • Pandas低レベルの計算はすべてSparkによって処理されますか?
  • すべてのpandasデータフレーム機能を公開しましたか?
  • DataFrame APIにさほど触れずに、Pandasに変換して、それで完了できますか?
43
Napitupulu Jon

spark=を使用してCSVファイルをpandasに読み込むことは、CSVファイルをメモリに読み込むという最終目標を達成するための非常に遠回りの方法です。

ここで使われているテクノロジーのユースケースを誤解しているようです。

Sparkは分散コンピューティング用です(ただし、ローカルで使用できます)。一般に、CSVファイルを単に読み取るために使用するには、あまりにも重いです。

あなたの例では、_sc.textFile_メソッドは単にspark RDDを与えます。これは事実上テキスト行のリストです。これはおそらくあなたが望むものではありません。型推論はありません実行されるため、CSVファイル内の数値の列を合計する場合、Sparkに関する限り文字列であるため、できません。

_pandas.read_csv_を使用して、CSV全体をメモリに読み込みます。 Pandasは各列のタイプを自動的に推測します。Sparkはこれを行いません。

質問に答えましょう:

Pandasオブジェクトをローカルメモリに保存します

はい。 toPandas()は、Spark DataFrameをメモリ内にあるPandas DataFrameに変換します。

Does Pandas Sparkがすべて処理する低レベルの計算

いいえ。Pandasは独自の計算を実行します。sparkとpandasの間には相互作用はありません。単にsomeAPI適合。

すべてのpandasデータフレーム機能?を公開しましたか?

いいえ。たとえば、Seriesオブジェクトにはinterpolateメソッドがありますが、これはPySpark Columnオブジェクトでは使用できません。 pandas APIにはPySpark APIにはない多くのメソッドと関数があります。

DataFrame APIにそれほど手を加えることなく、Pandasに変換して、それで完了できますか?

絶対に。実際、この場合はおそらくSparkを使用するべきではありません。_pandas.read_csv_は、hugeデータ量。

シンプルでローテクでわかりやすいライブラリを使用して問題を解決し、only必要に応じてより複雑なものに進んでください。多くの場合、より複雑なテクノロジーは必要ありません。

54
Phillip Cloud

いくつかのsparkコンテキストまたはHiveコンテキストメソッド(sc.textFile()hc.sql())を使用して 'メモリに'データを読み込むと、RDDが返されますが、RDDは残ります分散メモリ(ワーカーノード上のメモリ)、マスターノード上のメモリではありません。すべてのRDDメソッド(rdd.map()rdd.reduceByKey()など)は、ワーカーノード上で並列に実行するように設計されています。たとえば、rdd.collect()メソッドを実行すると、すべてのワーカーノードからマスターノードメモリにrddの内容がコピーされることになります。したがって、分散コンピューティングのメリットが失われます(ただし、まだrddメソッドを実行できます)。

パンダでも同様に、toPandas()を実行すると、データフレームを分散(ワーカー)メモリからローカル(マスター)メモリにコピーし、分散コンピューティング機能のほとんどを失います。そのため、(私がよく使用する)考えられるワークフローの1つは、分散コンピューティングメソッドを使用してデータを適切なサイズに事前調整してから、豊富な機能セットのPandasデータフレームに変換することです。お役に立てば幸いです。

1
TheProletariat