作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种将 RDD 拆分为两个或更多 RDD 的方法。我见过的最接近的是 Scala Spark: Split collection into several RDD?这仍然是一个单一的 RDD。
如果您熟悉 SAS,则如下所示:
data work.split1, work.split2;
set work.preSplit;
if (condition1)
output work.split1
else if (condition2)
output work.split2
run;
最佳答案
不可能从单个转换中产生多个 RDD*。如果要拆分 RDD,则必须应用 filter
对于每个拆分条件。例如:
def even(x): return x % 2 == 0
def odd(x): return not even(x)
rdd = sc.parallelize(range(20))
rdd_odd, rdd_even = (rdd.filter(f) for f in (odd, even))
如果您只有一个二进制条件并且计算很昂贵,您可能更喜欢这样的东西:
kv_rdd = rdd.map(lambda x: (x, odd(x)))
kv_rdd.cache()
rdd_odd = kv_rdd.filter(lambda kv: kv[1]).keys()
rdd_even = kv_rdd.filter(lambda kv: not kv[1]).keys()
这意味着只有一个谓词计算,但需要额外传递所有数据。
rdd_odd, rdd_even = (rdd.filter(f) for f in (odd, even))
如果以后我决定我只需要 rdd_odd
那么就没有理由实现rdd_even
.work.split2
您需要实现输入数据和 work.split1
.filter
或 map
如何执行此操作完全取决于 Spark 引擎。只要传递给转换的函数没有副作用,它就创造了优化整个管道的多种可能性。randomSplit
方法。
partitionBy
DataFrameWriter
的条款哪种文本输出格式:
def makePairs(row: T): (String, String) = ???
data
.map(makePairs).toDF("key", "value")
.write.partitionBy($"key").format("text").save(...)
关于apache-spark - 如何将一个 RDD 拆分为两个或多个 RDD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970709/
我是一名优秀的程序员,十分优秀!