我正在寻找验证超过 6 亿行和最多 30 列的 csv 文件的每一行(该解决方案必须处理该范围的几个大型 csv 文件)。
列可以是文本、日期或金额。csv 必须使用 40 条规则进行验证,一些规则会检查金额的正确性,其中一些会检查日期(格式)等......</p>
每个验证规则的结果必须保存并在之后显示。
验证数据后,将应用第二阶段的验证规则,此时间基于总和、平均值……每个规则的结果也必须保存。
我正在使用 Spark 加载文件。和
session.read().format("com.databricks.spark.csv").option("delimiter",
"|").option("header", "false").csv(csvPath)
或者
session.read().option("header", "true").text(csvPath);
要迭代每一行,我看到有两个选项:
- 使用
dataset.map( row -> { something });
“Something”应该验证每一行并将结果保存在某处
但是由于“某事”块将在执行程序中执行,我不知道如何将其返回给驱动程序或将其存储在可以从驱动程序进程中检索到的某个位置。
- 第二个选项是使用
dataset.collect
: 但它会导致内存不足,因为所有数据都将加载到驱动程序中。我们可以使用“take”方法,然后从数据集中删除子集(使用过滤器)并重复操作,但我不喜欢这种方法
我想知道是否有人可以建议我一种解决此类问题的可靠方法。基本上保留 Spark 用于验证规则的第二阶段,并使用 Spark 或其他框架来摄取文件并执行并生成第一组验证规则
在此先感谢您的帮助