mongodb - Spark Map RDD 与连接

标签 mongodb apache-spark

想知道对于大型数据集来说,两者中哪一个的性能更好。

假设我已经从 mongo 加载了订单,Orders 的架构是

case class Orders(organization: String, orderId: Long, recipient: String)

val orders = MongoSpark.load[Orders](spark)

现在我看到有两种方法可以进行下一步,我想查找归因于订单的每个公司。

选项1是MapRDD

val companies = MongoSpark.load[Company](spark, ReadConfig(...)).map { c => (c.id, c)}
val companiesMap = IndexedRDD(companies.rdd)

或者第二个选项是运行联接

val joined = orders.join(MongoSpark.load[Company(spark), $orderId === $companyId"

生产服务器上的此数据集范围为 500 GB - 785 GB。

最佳答案

随着 Spark (>2.0) 的最新进展,当谈到 RDD 与 DataFrame 时,几乎 100% 的情况下正确答案是 DataFrame。我建议您始终尝试留在 DaraFrame 世界中,根本不要过渡到 RDD。

更详细: RDD 总是会柯里化(Currying)每一行的所有字段。它还将实现 Scala 案例类,所有字符串都是重量级 Java 字符串等。另一方面,带有 tungsten(全阶段代码生成器及其优化编码器)和催化剂的 DataFrame 使一切变得更快。

  • RDD 都是 Scala/Java。 DataFrames 对类型使用自己的超薄编码,这些类型对相同的数据具有更加压缩/缓存友好的表示。

  • RDD 代码不经过 Catalyst,这意味着实际上不会对任何内容进行(查询)优化。

  • 最后,DataFrames 有一个代码生成器,可以真正优化不同阶段的链式操作。

这个read确实是必须的。

关于mongodb - Spark Map RDD 与连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41112172/

相关文章:

c# - 更新操作缓存并保持不同步

javascript - Mongo 集合在 Meteor 前端未定义

apache-spark - Spark 3.0-Spark聚合函数给出了与预期不同的表达式

python - 为什么即使使用 limit 命令访问结果,SPARK\PYSPARK 也会计算所有内容?

java - 堆空间错误: SparkListenerBus

mongodb - 根据精益查询的结果创建 Mongoose 模型

c# - C# MongoClient 是否可以在不首先序列化为 .NET 类型的情况下用于返回有效的 JSON?

java - 如何将字符串添加到spark数据集中的字符串数组列

scala - 是否可以将 word2vec 预训练的可用向量加载到 Spark 中?

c++ - MongoDB适用于日志分析项目