gpt4 book ai didi

python - 如何确定对象是否是 PySpark 中的有效键值对

转载 作者:太空狗 更新时间:2023-10-30 01:13:21 25 4
gpt4 key购买 nike

  1. 如果我有一个 rdd,我如何理解数据在 key:value 中格式?有没有办法找到相同的 - 像type(object) 告诉我一个对象的类型。我试过 print
    type(rdd.take(1))
    , 但它只是说 <type 'list'> .
  2. 假设我有一个类似 (x,1),(x,2),(y,1),(y,3) 的数据我用 groupByKey得到了(x,(1,2)),(y,(1,3)) .有没有办法定义 (1,2)(1,3)作为值,其中 x 和 y 是键?还是键必须是单个值?我注意到如果我使用 reduceByKeysum获取数据的函数((x,3),(y,4))然后将此数据定义为键值对变得容易得多

最佳答案

Python 是一种动态类型语言,PySpark 不对键值对使用任何特殊类型。一个对象被认为是 PairRDD 操作的有效数据的唯一要求是它可以按如下方式解包:

k, v = kv

由于语义(固定大小的不可变对象(immutable对象))和与 Scala Product 类的相似性,通常您会使用两个元素的 tuple。但这只是一个约定,没有什么能阻止你这样做:

key_value.py

class KeyValue(object):
def __init__(self, k, v):
self.k = k
self.v = v
def __iter__(self):
for x in [self.k, self.v]:
yield x
from key_value import KeyValue

rdd = sc.parallelize(
[KeyValue("foo", 1), KeyValue("foo", 2), KeyValue("bar", 0)])

rdd.reduceByKey(add).collect()
## [('bar', 0), ('foo', 3)]

并使任意类的行为类似于键值对。因此,如果某些东西可以正确地解包为一对对象,那么它就是一个有效的键值。实现 __len____getitem__ 魔术方法也应该有效。可能最优雅的处理方式是使用 namedtuples

此外,type(rdd.take(1)) 返回一个长度为 nlist,因此它的类型将始终相同。

关于python - 如何确定对象是否是 PySpark 中的有效键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com