繁体   English   中英

如何在 spark scala dataframe 视图上应用过滤器?

[英]How to apply filters on spark scala dataframe view?

我在此处粘贴了一个片段,其中我遇到了 BigQuery Read 的问题。 “wherePart”有更多的记录,因此 BQ 调用被一次又一次地调用。 将过滤器保持在 BQ Read 之外会有所帮助。 这个想法是,首先从 BQ 读取“mainTable”,将其存储在 spark 视图中,然后将“wherePart”过滤器应用于 spark 中的该视图。 [ “subDate”是一个 function,用于从一个日期中减去另一个日期并返回两者之间的天数]

  val Df =  getFb(config, mainTable, ds)

  def getFb(config: DataFrame, mainTable: String, ds: String) : DataFrame = {

    val fb = config.map(row => Target.Pfb(
      row.getAs[String]("m1"),
      row.getAs[String]("m2"),
      row.getAs[Seq[Int]]("days")))
      .collect

    val wherePart = fb.map(x => (x.m1, x.m2, subDate(ds, x.days.max - 1))).
      map(x => s"(idata_${x._1} = '${x._2}' AND ds BETWEEN '${x._3}' AND '${ds}')").
      mkString(" OR ")

    val q = new Q()
    val tempView = "tempView"
    spark.readBigQueryTable(mainTable, wherePart).createOrReplaceTempView(tempView)
    val Df = q.mainTableLogs(tempView)
    Df
  }

有人可以在这里帮助我吗?

您使用的是spark-bigquery-connector吗? 如果是这样,正确的语法是

spark.read.format("bigquery")
  .load(mainTable)
  .where(wherePart)
  .createOrReplaceTempView(tempView)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM