Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何确定对象是否是PySpark中的有效键值对 如果我有一个rdd,我如何理解数据在key:value中 格式?有没有一种方法可以找到相同的东西 类型(对象)告诉我对象的类型。我试着打印 键入(rdd.take(1)),但它只是说 假设我有一个类似于(x,1),(x,2),(y,1),(y,3)的数据,我使用 groupByKey并获得(x,(1,2)),(y,(1,3))。有没有一种定义的方法 (1,2)和(1,3)作为值,其中x和y是键?或者一个键必须是一个值?我注意到,如果我使用reduceByKey和sum函数来获取数据((x,3),(y,4)),那么将该数据定义为键值对就容易多了_Python_Apache Spark_Pyspark_Key_Key Value - Fatal编程技术网

Python 如何确定对象是否是PySpark中的有效键值对 如果我有一个rdd,我如何理解数据在key:value中 格式?有没有一种方法可以找到相同的东西 类型(对象)告诉我对象的类型。我试着打印 键入(rdd.take(1)),但它只是说 假设我有一个类似于(x,1),(x,2),(y,1),(y,3)的数据,我使用 groupByKey并获得(x,(1,2)),(y,(1,3))。有没有一种定义的方法 (1,2)和(1,3)作为值,其中x和y是键?或者一个键必须是一个值?我注意到,如果我使用reduceByKey和sum函数来获取数据((x,3),(y,4)),那么将该数据定义为键值对就容易多了

Python 如何确定对象是否是PySpark中的有效键值对 如果我有一个rdd,我如何理解数据在key:value中 格式?有没有一种方法可以找到相同的东西 类型(对象)告诉我对象的类型。我试着打印 键入(rdd.take(1)),但它只是说 假设我有一个类似于(x,1),(x,2),(y,1),(y,3)的数据,我使用 groupByKey并获得(x,(1,2)),(y,(1,3))。有没有一种定义的方法 (1,2)和(1,3)作为值,其中x和y是键?或者一个键必须是一个值?我注意到,如果我使用reduceByKey和sum函数来获取数据((x,3),(y,4)),那么将该数据定义为键值对就容易多了,python,apache-spark,pyspark,key,key-value,Python,Apache Spark,Pyspark,Key,Key Value,Python是一种动态类型化语言,PySpark对键、值对不使用任何特殊类型。对于被视为pairdd操作的有效数据的对象,唯一的要求是它可以按如下方式解包: k, v = kv 由于其语义(固定大小的不可变对象)和与ScalaProduct类的相似性,通常您会使用两个元素的tuple。但这只是一个惯例,没有什么能阻止你这样做: key_value.py 并使任意类的行为类似于键值。因此,如果可以将某个对象正确地解包为一对对象,那么它就是一个有效的键值。实现\uuu len\uuu和\uu ge

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

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

key_value.py

并使任意类的行为类似于键值。因此,如果可以将某个对象正确地解包为一对对象,那么它就是一个有效的键值。实现
\uuu len\uuu
\uu getitem\uuuu
魔术方法也应该有效。处理这个问题最优雅的方法可能是使用
namedtuples


另外
type(rdd.take(1))
返回长度为
n
列表,因此其类型将始终相同。

1<代码>rdd.first()
2。请澄清
groupByKey
通常用于您最终确实需要完整列表的情况。1。
rdd.first()
是否只返回第一个数据点?我想知道数据是否为键值格式。2.是的,我已经使用了
groupByKey
来获取整个数据,但是我想要键值格式的数据。您想要它作为一个映射吗?收集地图呢?首先你会得到一个元组,你所说的键值格式是什么意思?你期望哪种类型?我在collectAsMap上找不到一个好的简单来源。如果你有什么,请分享。能提供一个简单的例子吗?你自己试试看。输出大概是-{“a”:[1,2,3],“b”:[4],…}我正在向您学习。但我还是有些困惑。不管出于什么原因,我使用了
groupByKey
,我将得到
[('bar',(0)),('foo',(1,2))
…现在我可以使用类似于
rdd.map(lambda x:(x[0],len(x[1])
?我知道使用
countByKey
也可以做到这一点,但我想使用'groupByKey'
(0)
不是有效的
元组
文本。它只是
0
。否则与此完全相同。
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)]