我有大约100Gb的数据要处理。数据的格式为:
| timestamp | social_profile_id | json_payload |
|-----------|-------------------|------------------|
| 123 | 1 | {"json":"stuff"} |
| 124 | 2 | {"json":"stuff"} |
| 125 | 3 | {"json":"stuff"} |
我正在尝试通过S3
将此数据帧拆分到social_profile_id
中的文件夹中。大约有430,000 social_profile_id
个。
我已经毫无问题地将数据加载到了数据集中。但是,当我将其写出并尝试对其进行分区时,它将永远花费!这是我尝试过的:
messagesDS
.write
.partitionBy("socialProfileId")
.mode(sparkSaveMode)
我真的不在乎工作结束时每个文件夹中有多少个文件。我的理论是,每个节点都可以按social_profile_id
进行分组,然后写出到其各自的文件夹中,而无需进行随机播放或与其他节点通信。但是工作时间长并没有证明这一点。理想情况下,最终结果应类似于以下内容:
├── social_id_1 (only two partitions had id_1 data)
| ├── partition1_data.parquet
| └── partition3_data.parquet
├── social_id_2 (more partitions have this data in it)
| ├── partition3_data.parquet
| └── partition4_data.parquet
| ├── etc.
├── social_id_3
| ├── partition2_data.parquet
| └── partition4_data.parquet
| ├── etc.
├── etc.
我尝试几次增加计算资源,既增加实例大小又增加实例数。我从火花UI所看到的是写入操作占用的大部分时间。似乎所有执行程序都在使用中,但是执行时间却非常荒谬(例如花费3-5个小时来编写〜150Mb),将不胜感激!抱歉,如果我混淆了一些火花术语。