Используя pyspark, я пишу список отдельных писем из таблицы улья в простые файлы в HDFS. Ограничение состоит в том, что мои файлы не должны содержать более 4,5 миллионов строк.
Я написал этот код:
df = spark.read.table(working_table).select("email").distinct()
final_df = df.withColumn(
"rnk",
(F.row_number().over(Window.orderBy(F.lit(1))) / 4500000).cast("int")
)
final_df.groupBy("rnk").count().show()
+---+-------+
|rnk| count|
+---+-------+
| 0|4499999|
| 1|1858773|
+---+-------+
final_df.repartition("rnk").select("email").write.csv(
working_dir_email, mode="overwrite", compression="none"
)
Это работает почти нормально, за исключением того, что у меня всегда есть дополнительный пустой файл:
hdfs dfs -ls /tmp/emails
Found 4 items
-rw-rw-r-- 3 hadoop hadoop 0 2020-02-05 17:59 /tmp/emails/_SUCCESS
-rw-rw-r-- 3 hadoop hadoop 0 2020-02-05 17:59 /tmp/emails/part-00000-f724cf35-5ed8-4b7a-98c2-fc992dca9ad1-c000.csv
-rw-rw-r-- 3 hadoop hadoop 173936230 2020-02-05 17:59 /tmp/emails/part-00043-f724cf35-5ed8-4b7a-98c2-fc992dca9ad1-c000.csv
-rw-rw-r-- 3 hadoop hadoop 292499935 2020-02-05 17:59 /tmp/emails/part-00191-f724cf35-5ed8-4b7a-98c2-fc992dca9ad1-c000.csv
Можно ли избежать этого пустого файла ? Есть ли более умный способ достичь результата без пустого файла?