が、私は(MacOSの上で実行されている)スパークする全く新しいだと私は私のPCで私が持っているいくつかの.parquetファイルをテストしようとしてきた超えましたサイズが約120MBで、マスターをlocal[*]
に設定してローカルで実行しようとしています。()はApacheの中には、Java、OutOfMemoryErrorが発生スパーク.collectできません:GCオーバーヘッドの制限が
基本的に私が現在持っている操作のパイプラインは、次の1 ...
dataset
.where(...)
.toJavaRDD()
.sortBy(...) // Tried .collect() here. Current 'debug' point.
.groupBy(...) // Tried .collect() here.
.flatMapValues(...)
.mapToPair(...) // Tried .collect() here.
.reduceByKey(...); // Tried .collect() here.
私がお願いしたいと思いますまず最初に、どのように私は寄木細工のファイルスキーマを確認することができますか?私はHiveで可能だが何も見つけられていないことを読んだ。私に役立つリソースがあれば、それは本当に簡素化されます。
第2に、groupBy()などでアクセスする必要があるすべての寄木細工の列名がわからないため、最初のsortBy()ですべてを収集しようとしています。 Sparkを使い始めるためのマイナーなテストと、すべての仕組み)。しかし、質問によると、私はいつも与えられたエラーを得る。私が間違っていることは何ですか?結局、私は.collect()をしてはいけませんか?
私はいくつかの点で印刷しようとしたが、それは私の知る限り読んで、彼らは、コンピュータにローカルに保存されている場合、私は本当に知らないか、どのように私は、私は彼らをそうにアクセスできるよう、いくつかのログになっているようです出力を見ることができますか?
Spark設定に関しては、最も基本的な設定です。
final SparkConf sparkConf = new SparkConf()
.setMaster("local[*]")
.setAppName("test_app_name");
final JavaSparkContext jsc = new JavaSparkContext(sparkConf);
// Get the singleton instance of SparkSession
SparkSession sparkSession = SparkSession.builder()
.config(jsc.getConf())
.getOrCreate();
Dataset<Row> dataset = sparkSession.read()
.parquet(inputPath);
'dataset.printSchema'は、あなたのデータフレームのスキーマを与える必要があります。 'collect'はあなたの' dataset'の全内容をあなたの運転者の記憶に持ち込みます。 'dataset.collect'は' sortBy'と 'groupBy'の部分の正しい引数ではないと思います。 – philantrovert
速い返信@philantrovertのための多くのおかげで、問題の最初の部分が解決!ちょうどスキーマを持って、完璧!その膨大な量のデータをメモリにロードすることなくプレビューするために、データのほんの一部を取得する最良の方法はどれですか? – Niconoid
あなたのデータフレームで何をしようとしているのか分かりませんが、データフレームのソートとグループ化の方法があります。したがって、RDDに変換するのではなく、データフレームAPIでできることを達成することができます。ここにはたくさんの関数があります:https://spark.apache.org/docs/1.6.2/api/java/org/apache/spark/sql/functions.html – philantrovert