当前位置: 首页 > 知识库问答 >
问题:

火花分区数据多个文件

赏星河
2023-03-14

我有5个表存储为CSV文件(A.CSV、B.CSV、C.CSV、D.CSV、E.CSV)。每个文件按日期分区。如果文件夹结构如下:

A/ds=2017-07-01/A.csv
A/ds=2017-07-02/A.csv 
...
E/ds=2017-07-02/E.csv
data_facts = spark.read\
  .option('inferSchema', 'true')\
  .option('header', 'true')\
  .csv('/FileStore/A/')
Data/ds=2017-07-01/A.csv
Data/ds=2017-07-01/B.csv 
Data/ds=2017-07-01/C.csv 
Data/ds=2017-07-01/D.csv 
Data/ds=2017-07-01/E.csv 
Data/ds=2017-07-02/A.csv
Data/ds=2017-07-02/B.csv 
Data/ds=2017-07-02/C.csv 
Data/ds=2017-07-02/D.csv 
Data/ds=2017-07-02/E.csv 

共有1个答案

罗伟志
2023-03-14

将表放在顶部(A,B,C等),然后是ds分区,最后是原始的[相同的模式!]CSV文件的底部是正确的方法。

您提出的第二种样式将需要难看的黑客来使分区可用,并确保表中只有相关数据,而没有来自其他表的交叉污染模式。

 类似资料:
  • [新加入Spark]语言-Scala 根据文档,RangePartitioner对元素进行排序并将其划分为块,然后将块分发到不同的机器。下面的例子说明了它是如何工作的。 假设我们有一个数据框,有两列,一列(比如“a”)的连续值从1到1000。还有另一个数据帧具有相同的模式,但对应的列只有4个值30、250、500、900。(可以是任意值,从1到1000中随机选择) 如果我使用RangePartit

  • 我有一个spark工作,处理大量数据并将结果写入S3。在处理过程中,我可能有超过5000个分区。在写入S3之前,我想减少分区的数量,因为每个分区都是作为一个文件写入的。 在其他一些情况下,处理过程中可能只有50个分区。如果我想合并而不是因为性能原因重新分区,会发生什么。 从文档来看,它说只有当输出分区的数量少于输入时才应该使用coalesce,但是如果不是,它似乎不会导致错误吗?它会导致数据不正确

  • 我通过指定分区的数量从文本文件创建RDD(Spark 1.6)。但它给我的分区数与指定的分区数不同。 案例1 案例2 案例3 案例4 文件/home/pvikash/data/test的内容。txt是: 这是一个测试文件。将用于rdd分区 基于以上案例,我有几个问题。 对于案例2,显式指定的分区数为0,但实际分区数为1(即使默认最小分区为2),为什么实际分区数为1? 对于案例3,为什么在指定数量的

  • 一些脚本在工作时什么也不做,当我手动运行它们时,其中一个失败了,出现了以下消息: 错误SparkUI:未能绑定SparkUI java.net.bindexception:地址已在使用:服务“SparkUI”在重试16次后失败! 所以我想知道是否有一种特定的方法来并行运行脚本?

  • 我有一个大的csv文件,其中包含以下格式的数据。 CityId1,名称,地址,........., zip 城市2、姓名、地址等,。。。。。。。,拉链 CityId1,名称,地址,........., zip ......... 城市名称、姓名、地址等,。。。。。。。,拉链 我正在对上面的csv文件执行以下操作: > df1。groupBy($“cityId”)。agg(收集列表(结构(cols.

  • 我们开始在团队中尝试spark。在我们减少spark中的工作后,我们希望将结果写入S3,但是我们希望避免收集Spark结果。目前,我们正在为RDD的每个分区写文件,但是这会产生很多小文件。我们希望能够将数据聚合到几个文件中,这些文件按照写入文件的对象数量进行分区。例如,我们的总数据是100万个对象(这是不变的),我们希望生成40万个对象文件,而我们当前的分区生成大约2万个对象文件(这因每个作业而异