首页 > 解决方案 > 在 S3 中生成大量样本数据以供 Spark 使用?

问题描述

我有一个当前的火花管道,它在相对少量的数据上运行。对这么多数据的性能测试只能让我到目前为止,理想情况下我想在大量数据上测试火花管道。

是否有任何方法或工具可以模拟或模拟大量输入数据以供 spark 处理,尤其是当输入来自 Amazon S3 时?当我开始获得更多数据时,我不希望火花爆炸。

如果有帮助,我有一个输入数据必须遵守的 JSON 模式。

我不介意解决方案是否涉及在 spark 本身中生成假输入数据或在 s3 上生成假输入数据。

标签: jsonapache-sparkamazon-s3

解决方案


range使用该功能可以很容易地使用 spark 生成假数据。

以下是我将如何构建随机数据,带有可预测的噪声标签(但你可以定义任何逻辑),以防你喜欢机器学习。

val numberOfLines = 4 // or much more ;-)
val numberOfColumns = 4 // or 100
spark.range(numberOfLines)
   .select((0 until numberOfColumns).map(i => rand() as s"c_$i") :_*)
   .withColumn("label", 'c_0 + 'c_1*3 - 'c_2*6 + 9 + rand())
   .show
+-------------------+-------------------+-------------------+------------------+------------------+
|                c_0|                c_1|                c_2|               c_3|             label|
+-------------------+-------------------+-------------------+------------------+------------------+
|0.15187732653071206|0.26585053576672046| 0.9224023831542573|  0.71091441935634| 5.360791420252281|
| 0.2808748382324112|0.14308527032596263|0.18822196601676966|0.5838190107539017| 9.077521940396766|
| 0.7039634202215999| 0.9957351040685353| 0.7726957405440454|  0.98430608640107| 8.095422483235922|
|0.38721961100842617|0.47386287403626837|  0.856405481902437|0.3888408784723435|6.1446425516061955|
+-------------------+-------------------+-------------------+------------------+------------------+

要测试从 S3 读取它,您可以写入该数据帧并将其读回。


推荐阅读