RDD pyspark partitionBy - TypeError: 'int' object is not subscriptable
RDD pyspark partitionBy - TypeError: 'int' object is not subscriptable
list_1 = [[6, [3, 8, 7]], [5, [9, 7, 3]], [6, [7, 8, 5]], [5, [6, 7, 2]]]
rdd1 = sc.parallelize(list_1)
newpairRDD = rdd1.partitionBy(2,lambda k: int(k[0]))
print("Partitions structure: {}".format(newpairRDD.glom().collect()))
我想按键分区
我得到
TypeError: 'int' object is not subscriptable
我做错了什么?
所以,key 应该是引号内的整数
list_1 = [["6", [3, 8, 7]], ["5", [9, 7, 3]], ["6", [7, 8, 5]], ["5", [6, 7, 2]]]
这样就可以了
提供给partitionBy
的分区函数对RDD的每个条目的键进行操作,即每个条目的第一个元素。所以你在整数键上调用 lambda k: int(k[0])
,从而导致你遇到的错误。
如果您只是想按键分区,您的 lambda 函数应该是恒等运算,例如
newpairRDD = rdd1.partitionBy(2, lambda x: x)
list_1 = [[6, [3, 8, 7]], [5, [9, 7, 3]], [6, [7, 8, 5]], [5, [6, 7, 2]]]
rdd1 = sc.parallelize(list_1)
newpairRDD = rdd1.partitionBy(2,lambda k: int(k[0]))
print("Partitions structure: {}".format(newpairRDD.glom().collect()))
我想按键分区
我得到
TypeError: 'int' object is not subscriptable
我做错了什么?
所以,key 应该是引号内的整数
list_1 = [["6", [3, 8, 7]], ["5", [9, 7, 3]], ["6", [7, 8, 5]], ["5", [6, 7, 2]]]
这样就可以了
提供给partitionBy
的分区函数对RDD的每个条目的键进行操作,即每个条目的第一个元素。所以你在整数键上调用 lambda k: int(k[0])
,从而导致你遇到的错误。
如果您只是想按键分区,您的 lambda 函数应该是恒等运算,例如
newpairRDD = rdd1.partitionBy(2, lambda x: x)