2016-05-16 8 views
-1

私は約2000ポイントと500個の機能のデータフレームでデシジョンツリーを実行しています。 MaxBinsは182です。シャフリングブロックサイズを200から4000までどのように増やしても、スパークブロックサイズのシャフリングサイズを参照して、「最大整数に達しました」というデシジョンツリートレーニングのステージ3で失敗を続けます。私のデータフレームはrddではなく、SQLデータフレームを呼び出すことに注意してください。ここでSpark Mllib Decision Treeを実行するとブロックサイズエラーが発生する

は誤りである:ここでは

... 
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE 
    at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:828) 
    at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:125) 
    at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:113) 
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1206) 
    at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:127) 
    at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:134) 
    at org.apache.spark.storage.BlockManager.doGetLocal(BlockManager.scala:522) 
    at org.apache.spark.storage.BlockManager.getBlockData(BlockManager.scala:312) 
    at org.apache.spark.network.netty.NettyBlockRpcServer$$anonfun$2.apply(NettyBlockRpcServer.scala:58) 
    at org.apache.spark.network.netty.NettyBlockRpcServer$$anonfun$2.apply(NettyBlockRpcServer.scala:58) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) 
    ... 

は、それを生産するコードです:

val assembled = assembler.transform(features) 
val dt = new DecisionTreeClassifier().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures").setImpurity(impurity).setMaxBins(maxBins).setMaxDepth(maxDepth) 
val pipeline = new Pipeline().setStages(Array(labelIndexer, dt)) 
val model = pipeline.fit(assembled) 

は、この原因とどのようにそれを修正するかもしれないもの上の任意のポインタをありがとう。 ありがとうございます。

+1

コードやエラーを貼り付けることができますか? – RoyaumeIX

答えて

0

パーティションの数を増やしてみてください。 - repartition()メソッドを試してください。

sparkがパーティションマップデータブロックを処理するためにメモリマップファイルを使用するため、Sparkの問題ではなく2GB(Integer.MAX_VALUE)以上のものをマッピングすることは現在できません。

回避策は、パーティション数を増やすことです。これにより、特定のパーティションのブロックサイズが縮小され、問題の解決に役立ちます。

また、Spark自体でチャンク内のパーティションブロックを処理するための回避策がいくつかあります。

関連する問題