azure - 通过 Spark 更快地读取 Blob 存储

标签 azure apache-spark pyspark

我目前设置了一个包含 4 个工作节点和 2 个头节点的 Spark 集群。我在 Blob 存储中有一个 1.5 GB 的 CSV 文件,可以从头节点之一访问该文件。我发现使用 PySpark 加载这些数据并缓存它需要相当长的时间。有没有办法更快地加载数据?

我的一个想法是加载数据,然后将数据分区为 k(节点数)个不同的段,并将它们作为 parquet 文件保存回 blob。这样,我可以并行加载数据集的不同部分,然后联合...但是,我不确定所有数据是否都只加载到头节点上,然后当计算发生时,它会分发到其他机器。如果后者是真的,那么分区就没用了。

非常感谢您的帮助。谢谢。

最佳答案

通常,您希望 Blob 存储上的文件大小较小,这样您就可以在 Blob 存储之间传输数据以进行并行计算,从而获得更快的传输速率。一个好的经验法则是文件大小在 64MB - 256MB 之间;一个很好的引用是 Vida Ha 的 Data Storage Tips for Optimal Spark Performance

调用读取文件然后将其保存回 Parquet(使用默认的快速编解码器压缩)是一个好主意。 Parquet 本身由 Spark 使用,并且查询速度通常更快。唯一的调整是根据文件大小与工作节点数量进行更多分区。数据被加载到工作节点上,但分区很有帮助,因为会创建更多任务来读取更多文件。

关于azure - 通过 Spark 更快地读取 Blob 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40816061/

相关文章:

azure - 如何使用客户端 key 通过 Powershell 访问 Azure WebApp

apache-spark - SparkContext 中的 parallelize() 方法

apache-spark - Python worker 无法在 Pyspark 或 spark 版本 2.3.1 中重新连接

apache-spark - 带 SSL 的 PySpark 和 Kafka

pyspark - PySpark 中的 Python 字典查找

Azure AD 应用程序权限 : Is it possible to get permissions which comes under "Other permissions granted for tenant"?

azure - 如何在ansible中配置azure模块

java - Azure RBAC 与 Power shell 相比缺少任何权限吗?

python - 如何读取 pyspark avro 文件并提取值?

python - 在不使用数据帧的情况下匹配键并在 pyspark 中加入 2 个 RDD