gpt4 book ai didi

scala - 自定义缩放水龙头(或等效的Spark)

转载 作者:行者123 更新时间:2023-12-02 21:48:23 24 4
gpt4 key购买 nike

我正在尝试以自定义文件格式转储通常在HBase中的Hadoop群集上的某些数据。

我想做的或多或少是以下几点:

  • 从记录的分布式列表开始,例如Scalding管道或类似的
  • 通过一些计算函数
  • 分组项目
  • make,以便属于同一组的项目驻留在同一服务器上
  • 在每个组上使用
  • ,应用转换-涉及排序-并将结果写入磁盘。实际上,我需要编写一堆MapFile-本质上是对SequenceFile排序,再加上一个索引。

  • 我想通过Scalding实现上述功能,但是我不确定如何执行最后一步。

    当然,虽然不能以分布式方式写入已排序的数据,但是仍然应该可以将数据拆分为多个块,然后将每个已排序的块写入本地。不过,我找不到用于mapreduce作业的MapFile输出的任何实现。

    我认识到对非常大的数据进行排序是个坏主意,这就是即使我打算在单个服务器上将数据拆分为多个块的原因。

    有什么办法可以使用Scalding吗?可以直接使用Cascading或其他管道框架(例如Spark)来接受。

    最佳答案

    使用Scalding(和基础的Map / Reduce),您将需要使用TotalOrderPartitioner,它会进行预采样以创建输入数据的适当存储桶/拆分。

    由于有更快的磁盘数据访问路径,因此使用Spark可以加快速度。但是,仍然需要对磁盘/ hdfs进行改组,因此不会再好几个数量级。

    在Spark中,您将使用RangePartitioner,它获取分区数和RDD:

    val allData = sc.hadoopRdd(paths)
    val partitionedRdd = sc.partitionBy(new RangePartitioner(numPartitions, allData)
    val groupedRdd = partitionedRdd.groupByKey(..).
    // apply further transforms..

    关于scala - 自定义缩放水龙头(或等效的Spark),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226158/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com