Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Apache spark 为spark RDD中的每个键创建唯一值_Apache Spark - Fatal编程技术网

Apache spark 为spark RDD中的每个键创建唯一值

Apache spark 为spark RDD中的每个键创建唯一值,apache-spark,Apache Spark,我想创建一个包含键、值对的RDD,其中每个键都有一个唯一的值。这样做的目的是“记住”键索引以备将来使用,因为键可能会在分区周围乱序,基本上创建一个排序的查找表。我正在对一些文本进行矢量化,需要创建特征向量,因此我必须为每个关键点设置唯一的值 我尝试将第二个RDD压缩到我的RDD密钥中,但问题是如果两个RDD的分区方式不完全相同,那么最终会丢失元素 我的第二次尝试是使用散列生成器,比如,但我想知道是否有其他“spark native”方法可以做到这一点?我用的是PySpark,不是Scala 正如

我想创建一个包含
键、值
对的RDD,其中每个键都有一个唯一的值。这样做的目的是“记住”键索引以备将来使用,因为键可能会在分区周围乱序,基本上创建一个排序的查找表。我正在对一些文本进行矢量化,需要创建特征向量,因此我必须为每个关键点设置唯一的值

我尝试将第二个RDD压缩到我的RDD密钥中,但问题是如果两个RDD的分区方式不完全相同,那么最终会丢失元素


我的第二次尝试是使用散列生成器,比如,但我想知道是否有其他“spark native”方法可以做到这一点?我用的是PySpark,不是Scala

正如@aaronman所提到的,由于某些原因,这是一个尚未进入pyspark api的应用程序。在Java实现之外,下面是一些似乎有效的方法(但给出了每个分区上具有连续顺序的索引):


zipWithIndex
zipWithiUniqueId
刚刚添加到PySpark()中,将在即将发布的Spark 1.1.0版本中提供(它们目前在Spark
master
分支中提供)


如果您使用的是旧版本的Spark,您应该能够选择提交,以便对这些函数进行后端口,由于我认为它只会在
rdd.py

中添加行,可能是这样的感谢@aaronman--但这似乎不是pyspark的一个选项?哦,这很烦人,在这种情况下,我建议您查看一下,看看是否可以在python中实现等效的行,它似乎并不坏感谢您的提示,我将发布我的解决方案作为答案。我想为每个项目创建唯一的键,而不是唯一的值,这段代码非常有用。
def count_partitions(id, iterator): 
    c = sum(1 for _ in iterator)
    yield (id,c) 

def zipindex(l, indices, k) :
    start_index = indices[k]
    for i,item in enumerate(l) :
        yield (item,start_ind+i)

> parts = rdd.mapPartitionsWithSplit(count_partitions).collectAsMap()

> indices = parts.values()

> indices.append(0,0)

> rdd_index = rdd.mapPartitionsWithIndex(lambda k,l: zipindex(l,indices,k))