apache-spark - 测试火花增量表的创建非常慢
问题描述
我正在尝试通过创建具有已知值的微小输入增量表来为我们的 spark 逻辑编写一些测试用例。但是我注意到创建单个项目增量表需要很长时间,每个表大约 6 秒。这很快就会增加,一些使用多个表的测试用例需要几分钟才能运行!
我接受火花测试也将是缓慢的一面,但类似的镶木地板测试的创建速度约为 400 毫秒,这是可以容忍的
我在 Windows 上的这些测试中运行这些可能会导致我的问题,但其他格式似乎运行良好且速度快几个数量级
我用来生成计时的测试用例是
"delta" should "create in a reasonable time" in {
val spark: SparkSession = SparkSession.builder
.master("local[1]")
.getOrCreate()
import spark.implicits._
// This takes ~15seconds but most of that can be attributed to spark warming up
val preloadStart = System.currentTimeMillis()
Seq(("test-1", "my-test"))
.toDF("Id", "Source")
.write
.format("delta")
.save(s"c:/tmp/test-${java.util.UUID.randomUUID()}")
val preloadEnd = System.currentTimeMillis()
println("Preload Elapsed time: " + (preloadEnd - preloadStart) + "ms")
//actual test, why does this take ~6seconds?!?
val testStart = System.currentTimeMillis()
Seq(("test-2", "my-test"))
.toDF("Id", "Source")
.write
.format("delta")
.save(s"c:/tmp/test-${java.util.UUID.randomUUID()}")
val testEnd = System.currentTimeMillis()
println("Test Elapsed time: " + (testEnd - testStart) + "ms")
}
是否有我缺少的配置值或其他方式来加快增量表的创建?
解决方案
Spark 的默认配置不适用于通常发生在单元测试中的小型作业。以下是Delta Lake 在单元测试中使用的配置:
javaOptions in Test ++= Seq(
"-Dspark.ui.enabled=false",
"-Dspark.ui.showConsoleProgress=false",
"-Dspark.databricks.delta.snapshotPartitions=2",
"-Dspark.sql.shuffle.partitions=5",
"-Ddelta.log.cacheSize=3",
"-Dspark.sql.sources.parallelPartitionDiscovery.parallelism=5",
"-Xmx1024m"
)
您还可以应用相同的配置集来加快测试速度。
推荐阅读
- python - Python 中的 nargin 功能(来自 Matlab)
- php - Guzzle HTTP 客户端和 Shopify 访问令牌异常
- string - 如何在 Perl 6 中打开字符串的文件句柄?
- azure-active-directory - 如何使用 Graph API 按 Actor 过滤 Azure AD 审计
- cors - 从 Swagger Editor 发出请求时,如何避免 CORS 错误(“无法获取”或“未找到服务器或发生错误”)?
- design-patterns - keras中的继承与组合——为什么模型是从网络继承的
- wso2 - WSO2 ESB 数据服务
- ios - 在共享源之前从 iOS 应用程序中删除签名信息?
- css - 一个背景图像没有显示,而另一个是
- javascript - 材质 UI 浮动按钮操作