2016-08-15 4 views
4

Iは、次のコマンドを使用してローカルモードでスパーク2.0 Pysparkを呼び出している:入力データフレームが読み出されているjava.lang.OutOfMemoryErrorを:、メモリの100のバイトを取得することができないが得0

pyspark --executor-memory 4g --driver-memory 4g 

tsvファイルであり、580 K x 28の列を持ちます。私はデータフレーム上でいくつかの操作をしているし、私はtsvファイルにエクスポートしようとしていると私はこのエラーが表示されます。

df.coalesce(1).write.save("sample.tsv",format = "csv",header = 'true', delimiter = '\t') 

どのようにこのエラーを取り除くためのポインタですか。私は簡単にdfを表示したり、行を数えたりできます。

出力データフレームは、23列

エラーと3100行です:

Job aborted due to stage failure: Task 0 in stage 70.0 failed 1 times, most recent failure: Lost task 0.0 in stage 70.0 (TID 1073, localhost): org.apache.spark.SparkException: Task failed while writing rows 
    at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:261) 
    at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143) 
    at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143) 
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70) 
    at org.apache.spark.scheduler.Task.run(Task.scala:85) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.OutOfMemoryError: Unable to acquire 100 bytes of memory, got 0 
    at org.apache.spark.memory.MemoryConsumer.allocatePage(MemoryConsumer.java:129) 
    at org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter.acquireNewPageIfNecessary(UnsafeExternalSorter.java:374) 
    at org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter.insertRecord(UnsafeExternalSorter.java:396) 
    at org.apache.spark.sql.execution.UnsafeExternalRowSorter.insertRow(UnsafeExternalRowSorter.java:94) 
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.sort_addToSorter$(Unknown Source) 
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(Unknown Source) 
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) 
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:370) 
    at org.apache.spark.sql.execution.WindowExec$$anonfun$15$$anon$1.fetchNextRow(WindowExec.scala:300) 
    at org.apache.spark.sql.execution.WindowExec$$anonfun$15$$anon$1.<init>(WindowExec.scala:309) 
    at org.apache.spark.sql.execution.WindowExec$$anonfun$15.apply(WindowExec.scala:289) 
    at org.apache.spark.sql.execution.WindowExec$$anonfun$15.apply(WindowExec.scala:288) 
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$1$$anonfun$apply$23.apply(RDD.scala:766) 
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$1$$anonfun$apply$23.apply(RDD.scala:766) 
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 
    at org.apache.spark.rdd.ZippedPartitionsRDD2.compute(ZippedPartitionsRDD.scala:89) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 
    at org.apache.spark.rdd.ZippedPartitionsRDD2.compute(ZippedPartitionsRDD.scala:89) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 
    at org.apache.spark.rdd.ZippedPartitionsRDD2.compute(ZippedPartitionsRDD.scala:89) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 
    at org.apache.spark.rdd.CoalescedRDD$$anonfun$compute$1.apply(CoalescedRDD.scala:96) 
    at org.apache.spark.rdd.CoalescedRDD$$anonfun$compute$1.apply(CoalescedRDD.scala:95) 
    at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434) 
    at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440) 
    at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply$mcV$sp(WriterContainer.scala:253) 
    at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply(WriterContainer.scala:252) 
    at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply(WriterContainer.scala:252) 
    at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1325) 
    at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:258) 
    ... 8 more 

Driver stacktrace: 
+1

あなたは 'coalesce()'なしで試しましたか?明らかにあなたは記憶が不足しています。あなたの設定は何ですか? – gsamaras

+0

私はcoalesceなしで試して、それは正常に実行されます。私の構成は、16 GBのRAMとWindows 7のプロのIntel i-7です。過去に同じ方法で0.5M行と15〜20列の他のファイルをエクスポートしても問題ありませんでした。 –

答えて

3

を問題私にとっては確かだったcoalesce()df.write.parquet("testP")を代わりに使用して、coalesce()を使用していないファイルをエクスポートしました。その後、ファイルを読み取って、coalesce(1)でエクスポートします。

うまくいけば、それはあなたのためにもうまくいきます。

6

私は、この問題の原因はcoalesce()であると信じて、それは完全なシャッフルを回避しているにもかかわらず(のようなrepartition would do )、要求された数のパーティション内のデータを縮小する必要があります。ここで

、あなたは、このように一つのタスク(および1つのタスクのみ)は、そのコンテナがメモリの制限に苦しむ可能性がありすべてのデータ、で動作するように持って、1つのパーティションに収まるようにすべてのデータを要求しています。

したがって、1よりも多くのパーティションを要求するか、この場合はcoalesce()を避けてください。


そうしないと、あなたはあなたのメモリ構成を増加させるために、下記のリンクで提供ソリューションを試みることができる:

  1. Spark java.lang.OutOfMemoryError: Java heap space
  2. Spark runs out of memory when grouping by key
0

私の場合、ドライバは作業者よりも小さかった。ドライバを大きくすることで問題は解決しました。

関連する問題