我有一个PySpark数据帧,有49954行,如下所示:
>>pp.pprint(first_row.asDict())
{'broadcast_size': DenseVector([2861334.0, 2861334.0]),
'comment_count': DenseVector([0.0]),
'datetime': datetime.datetime(2017, 9, 19, 0, 42, 34, 246795),
'features': SparseVector(10984, {2: 1.0, 282: 1.0, 287: 0.1847, 288: 0.9828, 289: 1.0, 10981: -0.0726}),
'feed_id': 391,
'label': 12,
'onehot_weekday': SparseVector(6, {1: 1.0}),
'publisher_id': 2,
'std_broadcast_size': DenseVector([0.0, 0.0]),
'vertical_id': 0,
'wave_time': DenseVector([0.1847, 0.9828]),
'weekday': 1}
我想使用toLocalIterator
一次操作一行值,如下所示:
for row in data.rdd.toLocalIterator():
do_stuff(row)
但是,我的火花作业完全挂在toLocalIterator
上。它似乎与数据框中包含的内容无关,因为我在我的应用程序中也看到了其他数据集的这个问题。
火花仪表板UI在尝试迭代时列出了一个标题为Zeppelin toLocalIterator at <stdin>:5
的任务,如上所示,但它只是无限期地运行而没有任何错误消息。出于好奇,我让它运行的最长时间是30分钟。