Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala s3中的数据分区_Scala_Apache Spark_Amazon S3_Hive_Emr - Fatal编程技术网

Scala s3中的数据分区

Scala s3中的数据分区,scala,apache-spark,amazon-s3,hive,emr,Scala,Apache Spark,Amazon S3,Hive,Emr,我们将关系数据库中的数据放在一个表中,列id和日期如下所示 productid date value1 value2 1 2005-10-26 24 27 1 2005-10-27 22 28 2 2005-10-26 12 18 尝试将它们作为拼花地板加载到s3,并在配置单元中创建元数据,以使用athena和redshift查询它们。我们最频繁的查询将过滤产品id、日期、月份和年份。因此,尝试以一种具有更好查

我们将关系数据库中的数据放在一个表中,列id和日期如下所示

productid    date    value1 value2
1         2005-10-26  24    27
1         2005-10-27  22    28
2         2005-10-26  12    18
尝试将它们作为拼花地板加载到s3,并在配置单元中创建元数据,以使用athena和redshift查询它们。我们最频繁的查询将过滤产品id、日期、月份和年份。因此,尝试以一种具有更好查询性能的方式加载数据分区

根据我的理解,我可以创建如下分区

s3://my-bucket/my-dataset/dt=2017-07-01/   
...
s3://my-bucket/my-dataset/dt=2017-07-09/   
s3://my-bucket/my-dataset/dt=2017-07-10/
或者像这样,

s3://mybucket/year=2017/month=06/day=01/
s3://mybucket/year=2017/month=06/day=02/
...
s3://mybucket/year=2017/month=08/day=31/
  • 这将是更快的查询,因为我有7年的数据
  • 另外,如何在这里为产品id添加分区?这样会更快
  • 如何使用spark scala创建key=value的(s3://mybucket/year=2017/month=06/day=01/)文件夹结构。?有什么例子吗

  • 我们就这样分开了,

    s3://mybucket/year=2017/month=06/day=01/
    s3://mybucket/year=2017/month=06/day=02/
    ...
    s3://mybucket/year=2017/month=08/day=31/
    
    s3://bucket/year/month/year/day/hour/minute/product/region/availabilityzone/

    s3://bucketname/2018/03/01/11/30/nest/e1/e1a

    分钟四舍五入为30分钟。如果您的流量很高,您可以在几分钟内使用更高的分辨率,也可以减少一小时甚至一天

    基于我们想要查询什么样的数据(使用雅典娜或红移光谱)以及查询的持续时间,它帮助了我们很多


    希望有帮助。

    谢谢你的回答。你能帮我回答第三个问题吗?示例代码段会很有帮助。但是如果我不将year=放在路径中,我们将不得不像这里提到的那样手动添加分区-上次我检查时,Hive和相关工具需要
    key=value
    分区。我将删除带有=。我们每天都在使用GB的数据集,似乎不会影响速度。我们注意到多个分区的速度很慢。我们注意到多个分区的速度很慢——是的。如果您不需要显式地查询月或日,那么执行
    dt=20180301
    ,和
    hour=1130
    将更有效。您通过什么进行查询?年,还是产品,还是两者的结合?您支持多少独特的产品?若它是一个很长的ID,那个么您应该使用ID前缀进行分区。根据我所读到的,配置单元的性能开始下降到10000个分区左右。365*12*7太多了,无法在其上构建API,这将允许使用年、月、日或产品id进行查询。而且它不是365*12*7,它是365*7,对吗?哦,是的。对不起,7*365。。。无论如何API其实并不重要。如果不优化更好的分区方案,Spark代码的速度会很慢是的,这就是为什么要找到更好的分区。此外,还有20000多种产品,如果我将产品和日期作为分区,这将使情况变得最糟糕。您可以在数据帧上
    partitionBy(“field1”、“field2”)
    。。。然后使用
    .parquet(“s3://path”)
    写入磁盘