Spark Dataframe:在 window 上分区后将数据帧写入 CSV 时丢失文件
Spark Dataframe : Missing files when writing a dataframe into CSV after partitionning over a window
我有一个 Spark 数据框,假设包含 10K ID。 Dataframe 的每一行由一对 ID 及其欧式距离组成(每个 ID 代表一个文档。dataframe 如下所示:
ID_source | ID_destination | Euclidean Distance
1 1 0.0
1 2 1.3777
1 3 1.38
. . .
. . .
. . .
2 1 0.5555
2 2 0.0
. . .
. . .
. . .
对于每个 ID_source,我希望根据欧氏距离获得前 10 个 ID_destination。好吧,在 Spark 中,我设法用以下代码行做得很好。如上所述的矩阵被命名为similarity_join.
window = Window.orderBy(col("id_source")).partitionBy(col("id_source")).orderBy(col("EuclideanDistance").asc())
df_filtered = similarity_join.select('*', rank().over(window).alias('rank')).orderBy(col("id_source").asc()).filter((col('rank') <= 10))
当我想将结果写入 csv 时出现问题。
date_now = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
model_filename = "description_dataframe_"+date_now
df_filtered.write.csv(DESCRIPTION_MODEL_PATH+model_filename)
我在最终的 csv 中缺少 ID(在 hadoop 中压缩输出后获得)。当我使用低样本 (10-500) 时,我拥有所有 ID,但是当使用 5000 ID 样本时,我在 csv 中缺少很多 ID。看起来有些分区没有写在磁盘上。即使我使用 coalesce(1),我也有同样的问题。请任何帮助。我正在使用 5 台机器(1 台主机,4 台工人)。我打算增加到 1000 万个 ID,所以我将有 1000 万个 window(分区)
最后问题不在partionning,也不在writing部分。但相反,这是由于构建数据帧的算法(Bucketed Random LSH)造成的(similarity_join);该算法是不确定的,因此结果的数量因随机选择的参数而异。
我有一个 Spark 数据框,假设包含 10K ID。 Dataframe 的每一行由一对 ID 及其欧式距离组成(每个 ID 代表一个文档。dataframe 如下所示:
ID_source | ID_destination | Euclidean Distance
1 1 0.0
1 2 1.3777
1 3 1.38
. . .
. . .
. . .
2 1 0.5555
2 2 0.0
. . .
. . .
. . .
对于每个 ID_source,我希望根据欧氏距离获得前 10 个 ID_destination。好吧,在 Spark 中,我设法用以下代码行做得很好。如上所述的矩阵被命名为similarity_join.
window = Window.orderBy(col("id_source")).partitionBy(col("id_source")).orderBy(col("EuclideanDistance").asc())
df_filtered = similarity_join.select('*', rank().over(window).alias('rank')).orderBy(col("id_source").asc()).filter((col('rank') <= 10))
当我想将结果写入 csv 时出现问题。
date_now = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
model_filename = "description_dataframe_"+date_now
df_filtered.write.csv(DESCRIPTION_MODEL_PATH+model_filename)
我在最终的 csv 中缺少 ID(在 hadoop 中压缩输出后获得)。当我使用低样本 (10-500) 时,我拥有所有 ID,但是当使用 5000 ID 样本时,我在 csv 中缺少很多 ID。看起来有些分区没有写在磁盘上。即使我使用 coalesce(1),我也有同样的问题。请任何帮助。我正在使用 5 台机器(1 台主机,4 台工人)。我打算增加到 1000 万个 ID,所以我将有 1000 万个 window(分区)
最后问题不在partionning,也不在writing部分。但相反,这是由于构建数据帧的算法(Bucketed Random LSH)造成的(similarity_join);该算法是不确定的,因此结果的数量因随机选择的参数而异。