2017-06-06 13 views
2

tp_new、私はunpickle化エラー取得していますPySpark - UnpicklingErrorは:NEWOBJクラス引数がありNULL私は怒鳴るを実行していた場合

rdd = sc.parallelize([('HOMICIDE', {'2017': 1}), 
('DECEPTIVE PRACTICE', {'2015': 2, '2017': 2, '2016': 8}), 
('ROBBERY', {'2016': 2})]) 

rdd.flatMapValues(dict.items).collect() 

エラーが怒鳴ると、dictionayにflatMapValuesを使用して上の任意の問題がありますされます値

File "/usr/hdp/2.3.4.0-3485/spark/python/lib/pyspark.zip/pyspark/worker.py", line 98, in main 
    command = pickleSer._read_with_length(infile) 
    File "/usr/hdp/2.3.4.0-3485/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length 
    return self.loads(obj) 
    File "/usr/hdp/2.3.4.0-3485/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 422, in loads 
    return pickle.loads(obj) 
UnpicklingError: NEWOBJ class argument has NULL tp_new 
) [duplicate 3] 
17/06/06 17:01:14 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool 

答えて

1
rdd = sc.parallelize([('HOMICIDE', {'2017': 1}), 
         ('DECEPTIVE PRACTICE', {'2015': 2, '2017': 2, '2016': 8}), 
         ('ROBBERY', {'2016': 2})]) 

rdd.flatMapValues(lambda data: data.items()).collect() 

[('HOMICIDE', ('2017', 1)), 
('DECEPTIVE PRACTICE', ('2015', 2)), 
('DECEPTIVE PRACTICE', ('2017', 2)), 
('DECEPTIVE PRACTICE', ('2016', 8)), 
('ROBBERY', ('2016', 2))] 

dict.itemsは、メソッド記述子です。これらの値を展開する方法をフラットマップに通知する関数を提供する必要があります。私はlabmda関数をflatMap関数に渡すことでそれを行いました。

関連する問題