Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/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映射上的未知错误+;广播_Python_Apache Spark_Pyspark_Rdd - Fatal编程技术网

Python PySpark映射上的未知错误+;广播

Python PySpark映射上的未知错误+;广播,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我有一大组元组,其中元组[0]=整数和元组[1]=整数列表(由groupBy生成)。为了简单起见,我调用值tuple[0]键 列表元组[1]中的值最终可以是其他键 如果key=n,则key的所有元素都大于n且已排序/不同 在我正在处理的问题中,我需要通过以下方式找到公共元素的数量: 0[1,2] 1、[3,4,5] 2、[3,7,8] ….. 键0的值列表: 1:[3,4,5] 2:[3,7,8] 1列表和2列表之间的公共元素:3->len(公共元素)=1 然后我对键1、2等应用相同的设置,因此

我有一大组元组,其中
元组[0]=整数
元组[1]=整数列表
(由
groupBy
生成)。为了简单起见,我调用值
tuple[0]

列表
元组[1]
中的值最终可以是其他键

如果
key=n
,则key的所有元素都大于n且已排序/不同

在我正在处理的问题中,我需要通过以下方式找到公共元素的数量:

0[1,2]

1、[3,4,5]

2、[3,7,8]

…..

0
的值列表:

1:[3,4,5]

2:[3,7,8]

1
列表和
2
列表之间的公共元素:
3
->
len(公共元素)=1

然后我对键
1、2等应用相同的设置,因此:

1
的值列表:

3:..

4:..

5:..

我编写的顺序脚本基于pandas数据帧
df
,第一列
v
作为“键”列表(
as index=True
),第二列
n
作为值列表:

for i in df.v: #iterate each value 
    for j in df.n[i]: #iterate within the list
        common_values = set(df.n[i]).intersection(df.n[j])
        if len(common_values) > 0:
             return len(common_values) 
因为它是一个大数据集,所以我尝试用PySpark编写一个并行版本

df.A #column of integers 
df.B #column of integers 

val_colA = sc.parallelize(df.A)
val_colB = sc.parallelize(df.B)
n_values = val_colA.zip(val_colB).groupByKey().MapValues(sorted) # RDD -> n_values[0] will be the key, n_values[1] is the list of values 
n_values_broadcast = sc.broadcast(n_values.collectAsMap()) #read only dictionary

def f(element):
    for i in element[1]: #iterating the values of "key" element[0] 
        common_values =  set(element[1]).intersection(n_values_broadcast.value[i]) 
        if len(common_values) > 0:
             return len(common_values)

collection = n_values.map(f).collect()
程序在几秒钟后失败,出现错误,如
KeyError:665
,但未提供任何具体的失败原因

我是一个火花初学者,因此不确定这是正确的方法(我应该考虑<代码>前缀)吗?或者<代码> MavituthOuts<代码>,特别是错误在哪里。p>


谢谢你的帮助。

这个错误实际上非常清楚,而且是特定于Spark的。您正在使用
\uuu getitem\uuuu
[]
)访问Python
dict

如果字典中缺少键,您将得到
KeyError
。改用
get
方法:

n_values_broadcast.value.get(i, [])
n_values_broadcast.value.get(i, [])