2017-12-16 3 views
0

spark用にカスタマイズされたパーティショナー機能をPythonで作成するのを手伝ってください。カスタマイズされたパーティショナーがsparkでローカル変数を持たない

私はエントリのデータキーとパーティションIDの間のマッピングを伝えるファイルを持って、私が最初にスパーク

sc.parallelize(input_lines).partitionBy(numPartitions=xx, partitionFunc=lambda x : data_to_partition_map[x]) 

で、その後main.py

でdictの変数に「data_to_partition_mapを」それをロード私はローカルでこのコードを実行し、それがエラーを与える:

Traceback (most recent call last): 
    File "/home/weiyu/workspace/dice/process_platform_spark/process/roadCompile/main.py", line 111, in <module> 
    .partitionBy(numPartitions=tile_partitioner.num_partitions, partitionFunc=lambda x: tile_tasks_in_partitions[x]) 
    File "/home/weiyu/app/odps-spark/python/lib/pyspark.zip/pyspark/rdd.py", line 1785, in partitionBy 
    File "/home/weiyu/app/odps-spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1392, in __call__ 
    File "/home/weiyu/app/odps-spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 289, in get_command_part 
AttributeError: 'function' object has no attribute '_get_object_id' 

スパークがラムダオブジェクトをシリアル化することができないようだ、誰かがこのエラーについてどんな考えを持っており、それを修正する方法を教えません?ありがとうございました

答えて

1

dictアイテムを返す関数を使用しようとしましたが、それをpartiction関数として渡しましたか?

def return_key(x): 
     return your_dict[x] 

partitionFunctionとして渡します。

関連する問題