Apache spark Spark中广播的正确使用
假设我有一个RDD,比如(使用pyspark): 我想通过使用字符串距离函数来比较每个字符串和其他字符串。因此,这种情况下的最终结果将是一个5x5矩阵,其中对角线的值Apache spark Spark中广播的正确使用,apache-spark,pyspark,broadcast,Apache Spark,Pyspark,Broadcast,假设我有一个RDD,比如(使用pyspark): 我想通过使用字符串距离函数来比较每个字符串和其他字符串。因此,这种情况下的最终结果将是一个5x5矩阵,其中对角线的值1,因为字符串值在对角线处与其自身的值进行比较 因此,我的想法如下: 我创建了一个函数StringDistance(string,alist),它将string作为输入,与字符串的alist进行比较 播放RDDstrings: broadcastedRDDstrings = sc.broadcast(RDDstrings.colle
1
,因为字符串值在对角线处与其自身的值进行比较
因此,我的想法如下:
StringDistance(string,alist)
,它将string
作为输入,与字符串的alist
进行比较RDDstrings
:
broadcastedRDDstrings = sc.broadcast(RDDstrings.collect())
stringsDistances = RDDstrings.map(lambda string:StringDistance(string,broadcastedRDDstrings.value))
cache()
初始RDD
欢迎任何负面反馈 我建议另一种方法
def路径距离(a,b):
返回镜头(a)-镜头(b)
rdd=sc.parallelize([“maritza”、“alberto”、“andres”、“dakota”、“miguel”))。sortBy(λx:x)
距离=(rdd.笛卡尔(rdd)
.groupByKey()
.map(λ(x,y):[y中a的路径距离(x,a]))
收集距离
# [[-1, 0, 0, -1, 0],
# [-1, 0, 0, -1, 0],
# [ 0, 1, 1, 0, 1],
# [-1, 0, 0, -1, 0],
# [ 0, 1, 1, 0, 1]]
您可以在RDD上使用笛卡尔方法,如
rdd.笛卡尔(rdd)
stringsDistances = RDDstrings.map(lambda string:StringDistance(string,broadcastedRDDstrings.value))