49

私は 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 によって処理されますか?
  • すべてのパンダデータフレーム機能を公開していますか? (私はそう思います)
  • DataFrame APIにあまり触れずに、それをPandasに変換して、それで完了することはできますか?
4

2 に答える 2

66

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

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

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

あなたの例では、このsc.textFileメソッドは、効果的にテキスト行のリストであるスパーク RDD を提供するだけです。これはおそらくあなたが望むものではありません。型の推論は実行されないため、CSV ファイル内の数値の列を合計したい場合、Spark に関する限りそれらはまだ文字列であるため、合計することはできません。

pandas.read_csvCSV全体を使用してメモリに読み込むだけです。Pandas は、各列の型を自動的に推測します。Spark はこれを行いません。

あなたの質問に答えるために:

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

はい。toPandas()Spark DataFrame を Pandas DataFrame に変換します。これはもちろんメモリ内にあります。

Pandas の低レベルの計算はすべて Spark によって処理されますか

いいえ。Pandas は独自の計算を実行します。spark と pandas の間に相互作用はありません。API の互換性があるだけです。

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

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

DataFrame APIにあまり触れずに、それをPandasに変換して、それで完了することはできますか?

絶対。実際、この場合、Spark をまったく使用するべきではありません。大量のデータpandas.read_csvを扱っていない限り、ユースケースを処理する可能性があります。

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

于 2015-03-24T13:31:58.083 に答える