Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
PySpark-如何以稳定且合理快速的方式通过键连接两个大型RDD_Pyspark_Spark Dataframe_Pyspark Sql - Fatal编程技术网

PySpark-如何以稳定且合理快速的方式通过键连接两个大型RDD

PySpark-如何以稳定且合理快速的方式通过键连接两个大型RDD,pyspark,spark-dataframe,pyspark-sql,Pyspark,Spark Dataframe,Pyspark Sql,我正在运行一个pyspark应用程序,不断出现错误:容器因超出内存限制而被纱线杀死。使用5.1 GB的5 GB物理内存 hdfs中有两个数据集, 数据集A如下所示: a0,{“count”:0,ip:“0.0.0.0”} a1,{“计数”:1,“ip”:“0.0.0.0”} a1,{“计数”:1,“ip”:“0.0.0.1”} a2,{“计数”:2,“ip”:“0.0.0.0”} a3,{“计数”:3,“ip”:“0.0.0.0”} ... 数据集B如下所示: a0,{“count”:0,ip

我正在运行一个pyspark应用程序,不断出现错误:容器因超出内存限制而被纱线杀死。使用5.1 GB的5 GB物理内存

hdfs中有两个数据集, 数据集A如下所示:

a0,{“count”:0,ip:“0.0.0.0”}
a1,{“计数”:1,“ip”:“0.0.0.0”}
a1,{“计数”:1,“ip”:“0.0.0.1”}
a2,{“计数”:2,“ip”:“0.0.0.0”}
a3,{“计数”:3,“ip”:“0.0.0.0”}
...
数据集B如下所示:

a0,{“count”:0,ip:“0.0.0.0”}
a1,{“计数”:1,“ip”:“0.0.0.0”}
...
它们都是键、值格式的sequenceFile,我想通过键连接A和B,这样我可以得到如下结果:

a0,{“count”:0,ip:“0.0.0.0”}
a1,{“计数”:1,“ip”:“0.0.0.0”}
a1,{“计数”:1,“ip”:“0.0.0.1”}
并将结果保存为可读格式文件,如textfile、json或csv

首先,我使用cogroup:

rddresult=rddA.cogroup(rddB.filter)(lambda x:x[1][0]和x[1][1])
我还使用join:

rddresult=rddA.join(rddB)
但两者都会出现内存错误。 然后我想,这可能与groupByKey有关吗?因为它们都使用groupByKey底层。 因此,我更改了代码,如下所示:

def mergeSeq(a,b):
ta=类型(a)
tb=类型(b)
如果ta==列表:
res=a
其他:
res=[a]
如果tb==列表:
决议(b)
其他:
决议草案(b)
返回res
def过滤器等式(li):
#从rddB筛选没有值的行
如果类型(li)!=名单:
返回错误

如果Lee(Li)有多个事情,当你尝试加入2个数据集时,你需要考虑。密钥的数据分布如何?它是均匀分布的还是倾斜的?在你的情况下,你能做一个随机散列连接吗?@Akillanandbenkalvenkanna大多数密钥在数据中只出现一次,所以它们均匀分布,每个密钥是一个32字节的md5签名。洗牌散列连接不是默认的spark连接吗?如果是这种情况,那么不,我不能加入,它会像cogroup一样报告内存错误。
spark-submit --master yarn-cluster --name yy-adtracking --conf spark.akka.frameSize=2000 --conf spark.yarn.maxAppAttempts=1 --conf spark.yarn.executor.memoryOverhead=12000  --num-executors 24 --driver-memory 4g --executor-memory 2g --executor-cores 1 runjob.py