我一直在寻找试图找到问题所在的年龄。
我有一个pyspark数据帧,并按以下方式对其进行分区:
data.registerTempTable('data')
query = """
SELECT *
From data
DISTRIBUTE BY id1, id2, id3
SORT BY id1, id2, id3, date
"""
data = self.sql(query, store=False)
然后我想对分区应用一些代码,
data_list = data.rdd.mapPartitions(lambda x:func_1(form_set(x)))
我在内部函数中
def form_set(partition):
tracker_index =0
for row in partition:
tracker_index+=1
##some actions##
print("id1:{}, id2:{}, id3:{}, ind:{}".format(id1,id2,id3,tracker_index)
return partition
然后是一个仅接受form_set输出的外部函数
def func_1(partition):
#actions#
return partition
函数中的操作依赖于数据在正确的分区中,即ID1,ID2和ID3相同的所有数据应在同一分区中。 但是,当我查看打印日志时,会显示
id1:1, id2:2, id3:3, ind:1
id1:1, id2:2, id3:3, ind:1
id1:2, id2:2, id3:3, ind:2
id1:1, id2:2, id3:3, ind:1
id1:2, id2:2, id3:3, ind:2
我希望这是
id1:1, id2:2, id3:3, ind:1
id1:1, id2:2, id3:3, ind:2
id1:2, id2:2, id3:3, ind:1
id1:1, id2:2, id3:3, ind:3
id1:2, id2:2, id3:3, ind:2
我真的不知道该如何解决此问题。我是pyspark的新手,但是已经搜索了很长时间,找不到答案。任何帮助将不胜感激。 谢谢