我有一个问题,我希望有人可以向我解释。
我们假设我的数据如下:
('1', ['1', '1', '-1']),
('1', ['1', '2', '-2']),
('1', ['1', '3', '-3']),
('1', ['1', '4', '-4']),
('1', ['1', '5', '-5']),
('1', ['1', '6', '-6']),
('2', ['2', '7', '-7']),
('2', ['2', '8', '-8']),
('2', ['2', '9', '-9'])
我将它存储在带有两个分区的RDD中。一个分区包含 key ='1'的数据,另一个分区包含 key ='2'的数据。现在,当我跑:
def do_something(partition):
print('hello')
for element in partition:
if element[0] != '1':
yield element
my_rdd_new = my_rdd.mapPartitions(do_something)
它不打印'hello',但my_rdd_new包含正确的数据子集,即:
('2', ['2', '7', '-7']),
('2', ['2', '8', '-8']),
('2', ['2', '9', '-9'])
任何人都能解释为什么会发生这种情况吗?!
如果有帮助,我正在使用spark 2.0.1并在Jupyter IPython笔记本中运行代码。
更新:似乎 Jupyter IPython 是问题所在。我在命令提示符下运行它,它的工作原理。现在,问题是:为什么会发生以及如何解决?!
由于