我正在寻找一种方法将RDD分成两个或更多RDD.我见过的最接近的是Scala Spark:拆分收集到几个RDD?这仍然是一个RDD.
如果您熟悉SAS,请执行以下操作:
data work.split1, work.split2;
set work.preSplit;
if (condition1)
output work.split1
else if (condition2)
output work.split2
run;
Run Code Online (Sandbox Code Playgroud)
这导致了两个不同的数据集.它必须立即坚持以获得我打算的结果......
我怎样才能采取火花的RDD阵列,并且它分成两个RDDS随机所以每个RDD将包括数据的一些部分(可以说97%和3%).
我打算把名单洗牌然后 shuffledList.take((0.97*rddList.count).toInt)
但是我该如何改变rdd呢?
或者是否有更好的方法来拆分列表?
我试图在格式的数据上调用pyspark的reduceByKey函数 (([a,b,c], 1), ([a,b,c], 1), ([a,d,b,e], 1), ...
似乎pyspark不接受数组作为普通键中的键,通过简单地应用.reduceByKey(add)来降低值.
我已经尝试过首先将数组转换为字符串,.map((x,y): (str(x),y))但这不起作用,因为将字符串后处理回数组太慢了.
有没有办法让pyspark使用数组作为键或使用另一个函数快速将字符串转换回数组?
这是相关的错误代码
File "/home/jan/Documents/spark-1.4.0/python/lib/pyspark.zip/pyspark/shuffle.py", line 268, in mergeValues
d[k] = comb(d[k], v) if k in d else creator(v)
TypeError: unhashable type: 'list'
enter code here
Run Code Online (Sandbox Code Playgroud)
摘要:
输入:x =[([a,b,c], 1), ([a,b,c], 1), ([a,d,b,e], 1), ...]
所需的输出:y =[([a,b,c], 2), ([a,d,b,e], 1),...]
使得我可以访问a由y[0][0][0]和2由y[0][1]