首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试sparksql查询

测试sparksql查询
EN

Stack Overflow用户
提问于 2018-06-12 23:33:35
回答 2查看 365关注 0票数 0

我有一个Dataframe,我想对其运行一个简单的查询,如下所示:

代码语言:javascript
复制
def runQuery(df: DataFrame, queryString: String): DataFrame = {

    df.createOrReplaceTempView("myDataFrame")
    spark.sql(queryString)

}

其中queryString可以是像这样的

代码语言:javascript
复制
"SELECT name, age FROM myDataFrame WHERE age > 30"

但我真的很想提前知道查询是否可以在不抛出异常的情况下工作。例如,如果df没有列nameage怎么办?我想写一些类似这样的东西来处理它:

代码语言:javascript
复制
def runQuery(df: DataFrame, queryString: String): DataFrame = {

    if (/*** df and queryString are compatible ***/) {
        df.createOrReplaceTempView("myDataFrame")
        spark.sql(queryString)
    } else {
        spark.createDataFrame(sc.emptyRDD[Row], df.schema)
    }

}

有没有办法在'if‘语句中检查这一点?

EN

回答 2

Stack Overflow用户

发布于 2018-06-13 00:14:45

我不会太担心异常。只需用Try包装它:

代码语言:javascript
复制
import scala.util.Try
import org.apache.spark.sql.catalyst.encoders.RowEncoder

def runQuery(df: DataFrame, queryString: String): DataFrame = Try {
  df.createOrReplaceTempView("myDataFrame")
  df.sparkSession.sql(queryString)
}.getOrElse(df.sparkSession.emptyDataset(RowEncoder(df.schema)))
票数 1
EN

Stack Overflow用户

发布于 2018-06-13 05:08:34

您可以使用触发spark作业检查数据帧中存在或不存在的所有列

代码语言:javascript
复制
  def runQuery(df: DataFrame, queryString: String): DataFrame = 
    if(Array("name", "age", "address").forall(df.columns.contains)) {
      df.createOrReplaceTempView("myDataFrame")
      df.sparkSession.sql(queryString)
    } else {
      df.sparkSession.emptyDataset(RowEncoder(df.schema))
    }

也可以使用df.schema来匹配数据类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50820885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档