我正在从一些API读取数据到自定义类的Java流(A)。目前我正在将这些数据下载到CSV文件中,但我想将这些文件更改为Parquet文件。基于属性将数据分成多个文件(即,基于该属性分组)。有没有一种简单(推荐)的方法来使用Spark或直接从Java Streams实现这一点?
数据可能会变得非常大(最多20 GB),因此我不能简单地将其作为列表收集,然后将其一次性写入。它应该沉没。
我在考虑将流转换为Spark的DataFrame,然后将此DataFrame写入Parquet文件。如果这可以帮助我提供大量的数据,请告诉我如何将Java Stream转换为Spark的DataFrame?如果没有,请提出另一种方法来实现这一目标。
我当前的代码看起来像这样(我已将代码简化为可读):
Stream<A> data = apiService.getData();
data.forEach(instance -> {
// This function simply returns an instance of a custom class that takes care of sinking the data into a CSV file.
// The file is selected within the function based on a single attribute's value of the data instance.
getTheAppropriateSinkFor(instance).add(instance);
});