使用'partitionBy()'将Spark写入S3;但在S3目录中没有列名(正值)

时间:2018-08-01 23:06:41

标签: amazon-web-services apache-spark amazon-s3 pyspark apache-spark-sql

我在AWS S3中有一个名为's3a:// devices'的存储桶

我正在尝试使用下面的代码根据公司名称向其中写入数据框。

df = df.withColumn("companyname_part", df["companyname"])
df.repartition("companyname_part").dropDuplicates().write.mode("append").partitionBy("companyname_part").parquet('s3a://devices/')

我对上面的存储和每日增量代码有一些疑问。

  1. 如果我每天提取所有当前数据并想每天覆盖和删除重复项,是否应该将上述代码更改为每天以“ overwrite”运行? S3存储桶的先前版本会被每个分区覆盖吗?

  2. 是否存在可以自动执行的“ HDFS”命令,或者可以通过os.command / subprocess在PySpark脚本中使用的命令来获取目录的“ companyname_part =“部分,以便它只读取“ =”之后的值。我担心所有以相同文本开头的分区都会使Athena查询的速度变慢。

  3. 是否有人对S3的最佳分区有反馈/建议?我正在使用此分区列,因为它将是API的查找。但是我对分区的最佳大小(兆字节)感到好奇。 5000太多了吗?

0 个答案:

没有答案