【问题标题】:Return Temporary Spark SQL Table in Scala在 Scala 中返回临时 Spark SQL 表
【发布时间】:2016-02-07 21:33:12
【问题描述】:

首先,我使用

将 CSV 文件转换为 Spark DataFrame
val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load("/usr/people.csv")

然后输入 df 并返回我可以看到

res30: org.apache.spark.sql.DataFrame = [name: string, age: string, gender: string, deptID: string, salary: string]

然后我使用df.registerTempTable("people") 将 df 转换为 Spark SQL 表。

但是在那之后当我做people而不是得到类型表时,我得到了

<console>:33: error: not found: value people

是因为 people 是临时表吗?

谢谢

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    当您使用您使用的 registerTempTable 命令注册临时表时,它将在您的 SQLContext 中可用。

    这意味着以下是不正确的,会给你你得到的错误:

    scala> people.show
    <console>:33: error: not found: value people
    

    要使用临时表,您需要使用 sqlContext 调用它。示例:

    scala> sqlContext.sql("select * from people")
    

    注意:df.registerTempTable("df")会注册一个名为df的临时表,对应你应用该方法的DataFramedf

    所以在 df 上持久化不会持久化表而是 DataFrame,即使 SQLContext 将使用该 DataFrame。

    【讨论】:

      【解决方案2】:

      上述答案也适用于 Zeppelin。如果要运行 println 来查看数据,则必须将其发送回驱动程序以查看输出。

      val querystrings = sqlContext.sql("select visitorDMA, 
              visitorIpAddress, visitorState, allRequestKV
          from {redacted} 
          limit 1000")
      
      querystrings.collect.foreach(entry => {
          print(entry.getString(3).toString() + "\n")
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-21
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 2017-04-01
        • 2017-11-01
        • 1970-01-01
        相关资源
        最近更新 更多