Pyspark 数据分布

Posted

技术标签:

【中文标题】Pyspark 数据分布【英文标题】:Pyspark data distribution 【发布时间】:2015-06-18 12:20:04 【问题描述】:

我有 1000 个 csv 文件要使用 spark 中可用的 map 函数并行处理。我有两个桌面连接在一个集群中,我正在使用 pyspark shell 进行计算。我将 csv 文件的名称传递给 map 函数,该函数根据名称访问文件。但是,我需要将文件复制到从属设备才能使进程正常运行。这意味着必须有另一个系统上所有 csv 文件的副本。请建议替代存储,同时避免数据传输延迟。

我还尝试将这些文件存储到 3 维数组中,并使用并行化命令生成 RDD。但这会导致内存不足错误。

【问题讨论】:

【参考方案1】:

您可以使用 spark-csv 加载文件 https://github.com/databricks/spark-csv

然后您可以使用数据框概念来预处理文件。 由于它有 1000 个 csv 文件,如果它们之间有一些链接,请使用 spark-sql 对它们运行操作,然后提取输出以进行最终计算。

如果这不起作用,您可以尝试在 HBase 或 Hive 中加载相同的内容,然后使用 spark 进行计算,我在单节点集群中检查了 100 gb 的 csv 内容。 它可能会有所帮助

【讨论】:

我需要将每个 csv 文件作为单独的数组使用,以执行一些 ML 功能。我认为您指出的方式是用于 sql 查询功能。是否可以使用 spark-csv 将它们保留在内存中?从机如何访问数据? Spark SQL 实际上将结构化数据查询为分布式数据集(RDD),因此即使是 ML 也可以运行。现在访问数据就像任何其他 RDD 一样 它解决了这个问题,但仍然存在数据必须存在于两个工作人员上才能使用 spark-csv 访问它的问题。那么,除了使用 HBase 来实现更快的数据访问而不重复之外,别无他法? 你的 HDFS 位于哪里,因为它已经分布式访问,Hbase 和 Hive 也是如此。因此,如果我们遵循这个概念,您的 hdfs 可以成为中心,并且您的数据可以让多个工作人员访问该数据资源..

以上是关于Pyspark 数据分布的主要内容,如果未能解决你的问题,请参考以下文章

分布式数据分析利器 PySpark 背后的原理

pyspark 负载分布不均匀,零件尺寸增加一倍

从 PySpark 中的类别分布中查找值的百分位数

PySpark:在汇总负数分布时,describe() 函数出错——最小值和最大值翻转

PySpark ML——分布式机器学习库

在pyspark中以分布式方式有效地生成大型DataFrame(没有pyspark.sql.Row)