scala - 我应该在 Spark sql 中使用哪一个来获得更好的性能,是从 Parquet 文件读取数据还是从数据库读取数据?

标签 scala apache-spark-sql

现在我是 Spark sql 的初学者(在 scala lang 中)。我想运行查询。使用 parquet 文件真的能提高性能吗? Parquet 文件或从数据库(Oracle)读取数据是否需要放置在 HDFS 中以执行 Spark 查询?哪一种是正确的方法?

最佳答案

我可以肯定地说,与通过 JDBC 连接器读取 Oracle 等 RDBMS 相比,从 HDFS 读取 parquet 文件更具可扩展性。原因是数据局部性 - 如果您在 HDFS 数据节点所在的同一主机上运行 Spark 执行器,并且可以有效地将数据读入内存,而无需网络开销。 请参阅https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-data-locality.htmlHow does Apache Spark know about HDFS data nodes? 了解更多详情。

此外,Parquet 格式是列式的,与传统 RDBMS 作为 OLAP 存储相比具有优势(尤其是在数据稀疏时)。简短比较:https://www.wikiwand.com/en/Column-oriented_DBMS#/Benefits

关于scala - 我应该在 Spark sql 中使用哪一个来获得更好的性能,是从 Parquet 文件读取数据还是从数据库读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36786604/

相关文章:

scala - 如何从 UDF 创建自定义 Transformer?

scala - 如果我在单行数据 block 笔记本中执行命令会花费更少的时间吗?

java - 使用 Apache Spark 和 Java 对 DataFrame 进行分组和聚合?

apache-spark - 为什么 Spark 不根据读取时的 Parquet block 大小创建分区? (相反,它似乎按 Parquet 文件压缩大小进行分区)

dataframe - pyspark获取一行中每一列的最新非空元素

java - 同时运行同一功能的多个版本

scala - 将 Shapeless hlist 类型 F[T1]::...::F[Tn]::HNil 映射到类型 T1::...::Tn::HNil(类型级别排序)

apache-spark - 使用 PySpark 分解数组值

java - 模板 playframework 中的 html 语法

用于理解的 Scala 与 foreach