apache-spark - PySpark:如何加速 sqlContext.read.json?

标签 apache-spark amazon-s3 pyspark

我正在使用下面的 pyspark 代码从 s3 存储桶中读取数千个 JSON 文件

sc = SparkContext()
sqlContext = SQLContext(sc)
sqlContext.read.json("s3://bucknet_name/*/*/*.json")

读取和解析 JSON 文件需要花费大量时间(约 16 分钟)。我怎样才能并行化或加速这个过程?

最佳答案

简短的回答是:这取决于(取决于底层基础设施)和数据内的分布(称为偏斜,它仅在您执行任何导致随机播放的操作时适用)。

如果您发布的代码运行在 AWS 的 EMR 或 MapR 上,最好优化每个集群节点上的执行器数量,使每个执行器的核心数量为 3 到 5 个。从读写 S3 的角度来看,这个数字很重要。

缓慢背后的另一个可能原因可能是可怕的公司代理。如果您对 S3 服务的所有请求都通过公司代理进行路由,那么后者将成为巨大的瓶颈。最好通过 EMR 集群上的 NO_PROXY JVM 参数绕过代理到 S3 服务。

talk from Cloudera连同他们优秀的博客 onetwo是对调整集群的出色介绍。由于我们使用的是 sql.read.json,因此底层的 Dataframe 将被分成由 yarn param sql.shuffle.paritions 给定的分区数> described here .最好将其设置为 2 * Number of Executors * Cores per Executor。在计算值超过 200

的集群上,这肯定会加快读取速度

此外,如上述答案所述,如果您知道 json 的架构,当 inferSchema 设置为 true< 时,它可能会加快处理速度.

我还恳请您查看 Spark UI并深入研究 DAG 以寻找慢作业。它是 Spark 性能调优的宝贵工具。

我计划在 AWS 上整合尽可能多的基础设施优化' EMR进入博客。完成后将使用链接更新答案。

关于apache-spark - PySpark:如何加速 sqlContext.read.json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50957967/

相关文章:

ruby-on-rails - 带有 S3 on Rails 3 的回形针/未初始化的常量 AWS::S3::Connection

node.js - 为什么我的 S3 存储桶中的视频没有缓冲到 html 视频标签?

python - 数据框上的多条件过滤器

apache-spark - Spark 是否受益于持久表中的 `sortBy`?

apache-spark - 我可以在 pyspark 中提取 Logistic 回归系数的有效值吗

r - 在sparklyr中使用spark_read_csv报错 "Invalid method csv for object"

dataframe - 如何在某些情况下在 Spark DataFrame 中创建新列 'count'

amazon-web-services - AWS(亚马逊网络服务)中的 keyName 是什么?

java - 如何将 FP-Growth 模型FrequentItemSet 结果保存到文本文件中?

hadoop - Spark setAppName 未出现在 Hadoop 运行应用程序 UI 中