scala - 在 Apache Spark 中对 RDD 进行分区,使得一个分区包含在一个文件中

标签 scala csv apache-spark bigdata

我正在创建一个像这样的 2.csv 文件的 RDD

val combineRDD = sc.textFile("D://release//CSVFilesParellel//*.csv")

然后我想在这个 RDD 上定义自定义分区,这样一个分区必须包含一个文件。
以便跨一个节点处理每个分区,即一个 csv 文件,以加快数据处理速度

是否可以根据文件大小或一个文件中的行数或一个文件的文件结尾字符编写自定义分区程序?

我如何实现这一目标?

一个文件的结构如下所示:

00-00

时间(以秒为单位) Measure1 Measure2 Measure3..... Measuren

0

0.25

0.50

0.75

1

...

3600

1.第一行数据包含小时:分钟
每个文件包含 1 小时或 3600 秒的数据

2.第一列是第二列,分为4个部分,每部分250 ms,数据记录250 ms
  • 对于每个文件,我想将小时数:分钟添加到秒,以便我的时间看起来像这样的小时-分钟-秒。但问题是我不希望这个过程按顺序发生
  • 我正在使用 for-each 函数来获取每个文件名 -> 然后在文件中创建数据的 RDD 并添加上面指定的时间。
  • 但我想要的是每个文件应该去一个节点处理和计算时间而不是到一个文件中的数据 跨节点分布以计算时间。

  • 谢谢你。

    问候,

    维奈·乔格卡

    最佳答案

    让我们回到基础。

  • 大数据哲学将过程移至数据而非数据进行处理。这种方式增加了并行性,从而增加了 I/O 吞吐量
  • 一个分区器占用一个文件会减少并行度而不是增加。
  • 实现此目的的最简单方法是使用 textInpuTFormat 并通过 gzip 或 lzo 压缩您的输入文件(不应进行 lzo 索引)。
  • Gzip 不可拆分将强制一个文件进入一个分区,但这绝不会有助于增加任何类型的吞吐量
  • 编写自定义输入格式从 FileInputFormat 扩展并提供您的 splitlogic 和 recordReader 逻辑。

  • 要在 spark 中使用自定义输入格式,请遵循

    http://bytepadding.com/big-data/spark/combineparquetfileinputformat/

    关于scala - 在 Apache Spark 中对 RDD 进行分区,使得一个分区包含在一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37701326/

    相关文章:

    python - 使用python将带有俄语字符的二维数组打印到csv

    scala - 从 RDD 中随机获取一个元素

    mysql - Spark 存在错误时丢弃 Hive 表

    serialization - Spark com.fasterxml.jackson.module 错误

    scala - Scala 中不同的覆盖方法有什么区别?

    scala - sys.process 将进程包装为函数

    json - Scala Pickling 似乎不适用于 Point2D.Double

    r - 在R中将Excel文件列表动态转换为CSV文件

    linux - awk 拆分文件给出不完整的行

    scala - 给定非交换关联操作,foldRight 是否等同于 foldLeft?