scala - 如何理解这个语法?案例 streamingRelation@StreamingRelation(dataSourceV1, sourceName, output)
问题描述
在阅读结构化流式传输的源代码时,我对这个语法感到困惑。
在 microBatchExecution.scala
val _logicalPlan = analyzedPlan.transform {
case streamingRelation@StreamingRelation(dataSourceV1, sourceName,
output) =>
toExecutionRelationMap.getOrElseUpdate(streamingRelation, {
// Materialize source to avoid creating it in every batch
val metadataPath = s"$resolvedCheckpointRoot/sources/$nextSourceId"
val source = dataSourceV1.createSource(metadataPath)
nextSourceId += 1
logInfo(s"Using Source [$source] from DataSourceV1 named
'$sourceName' [$dataSourceV1]")
StreamingExecutionRelation(source, output)(sparkSession)
})
……
}
我的问题:
如何理解案例 streamingRelation@StreamingRelation(dataSourceV1, sourceName, output)?
“@”在这里的作用是什么?
解决方案
有许多不同的方法可以进行模式匹配:
您可以按类型将整个对象捕获到变量:
case streamingRelation: StreamingRelation =>
//do something with object of type StreamingRelation bound to variable streamingRelation
或者你可以解构它:
case StreamingRelation(dataSourceV1, sourceName, output) =>
//do something with members of an object like dataSourceV1, sourceName etc.
@
结合两者的语法:
case streamingRelation@StreamingRelation(dataSourceV1, sourceName, output) =>
//both whole object is available as streamingRelation and all matched members like dataSourceV1, sourceName
推荐阅读
- java - 如何使用 graphql-kickstart-spring-boot-starter-webflux 注册 DataLoaders?
- postgresql - 在运行具有多个连接的查询时使用表中的特定索引
- nested - Helm 如何将复杂 values.yaml 的部分复制到配置映射中
- linux - 基于具有不同行号的公共列合并两个txt文件
- java - 如何在Android(Java)的GridView中使ImageView四舍五入?
- liquibase - 我可以将 CSV 文件作为命令行参数传递给
在 Liquibase 中?如果没有,有没有其他方法可以做到这一点? - javascript - 如何从 JWT 标头中获取值到 nodejs 中的变量中?
- arrays - 数组意外未被函数修改
- javascript - 使用带有 iFrame 的 Owl Carousel 时 iPhone 崩溃
- pine-script - 字符串数组作为输入选项?