クラスのオブジェクトのリストに対して flatMap() を実行すると、エラーが発生します。int、list などの通常の python データ型では問題なく動作しますが、リストにクラスのオブジェクトが含まれているとエラーが発生します。コード全体は次のとおりです。
from pyspark import SparkContext
sc = SparkContext("local","WordCountBySparkKeyword")
def func(x):
if x==2:
return [2, 3, 4]
return [1]
rdd = sc.parallelize([2])
rdd = rdd.flatMap(func) # rdd.collect() now has [2, 3, 4]
rdd = rdd.flatMap(func) # rdd.collect() now has [2, 3, 4, 1, 1]
print rdd.collect() # gives expected output
# Class I'm defining
class node(object):
def __init__(self, value):
self.value = value
# Representation, for printing node
def __repr__(self):
return self.value
def foo(x):
if x.value==2:
return [node(2), node(3), node(4)]
return [node(1)]
rdd = sc.parallelize([node(2)])
rdd = rdd.flatMap(foo) #marker 2
print rdd.collect() # rdd.collect should contain nodes with values [2, 3, 4, 1, 1]
コードは、マーカー 1 (コードでコメント) まで正常に動作します。問題はマーカー 2 の後で発生します。具体的なエラー メッセージは次のとおりAttributeError: 'module' object has no attribute 'node'
です。このエラーを解決するにはどうすればよいですか?
私はpyspark 1.4.1を実行しているubuntuに取り組んでいます