scala - 使用 Scio 将 SCollection 从 textFile 放入 BigQuery
问题描述
我已经阅读了一些文档textFile
,并做了flatMap
一个单词,为每个单词添加了一些额外的信息:
val col = sc.textFile(args.getOrElse("input","documents/*"))
.flatMap(_.split("\\s+").filter(_.nonEmpty))
val mapped = col.map(t => t + ": " + extraInformation())
我目前正在轻松地将其保存为文本
mapped.saveAsTextFile(args.getOrElse("output", "results"))
但我不知道如何将地图保存到 BigQuery 架构。我见过的所有示例都从 BigQuery 创建初始 Scollection,然后将其保存到另一个表中,因此初始集合[TableRow]
不是[String]
.
这里的正确方法是什么?我是否应该调查如何将我的数据转换为 Big Query 可以接受的一种集合?或者我应该尝试进一步调查如何将这个纯文本直接推送到表格中?
解决方案
我建议@BigQueryType.toTable
在案例类上使用注释,如下所示:
import com.spotify.scio.bigquery._
object MyScioJob {
@BigQueryType.toTable
case class WordAnnotated(word: String, extraInformation: String)
def main(args: Array[String]): Unit = {
// ...job setup logic
sc.textFile(args.getOrElse("input","documents/*"))
.flatMap(_.split("\\s+").filter(_.nonEmpty))
.map(t => WordAnnotated(t, extraInformation())
.saveAsTypedBigQuery("myProject:myDataset.myTable")
}
}
Scio wiki上有更多关于此的信息。
推荐阅读
- mongodb - Mongo URI 问题 - SSL 对等证书验证失败:自签名证书
- typescript - 在 Typscript 可区分联合中省略整个类型
- python - IP 捕获或主机名的正则表达式
- python - 如何计算python函数的执行时间?
- c++ - 使用 cmake 进行墨西哥
- javascript - querySelector 似乎正在从输入 id="submit" 和另一个输入 type="submit" 中识别“#submit”
- python - 如何使用 Python 停止/删除 GCP Compute 实例
- python - 所选值的总最大值
- swift - 在 Swift 中为 UIButton 的文本添加基本的发光效果
- python - 如何使用字典执行分类,其中每个键都是标签,每个值都是数据框?