如何打印出 spark.sql 对象?

Posted

技术标签:

【中文标题】如何打印出 spark.sql 对象?【英文标题】:How do I print out a spark.sql object? 【发布时间】:2020-09-03 17:05:08 【问题描述】:

我有一个包含几个变量的 spark.sql 对象。

import com.github.nscala_time.time.Imports.LocalDate

val first_date = new LocalDate(2020, 4, 1)
val second_date = new LocalDate(2020, 4, 7)

val mydf = spark.sql(s"""
        select *
        from tempView
        where timestamp between '0' and '1'
""".format(start_date.toString, end_date.toString))

我想打印出mydf,因为我运行了mydf.count,结果为0。

我跑了mydf 又回来了mydf: org.apache.spark.sql.DataFrame = [column: type]

我也试过println(mydf),但没有返回查询。

有这个相关的question,但是没有答案。

如何打印查询?

【问题讨论】:

【参考方案1】:

最简单的方法是将您的查询存储到 variable,然后打印变量以获取查询。

spark.sql中使用variable

Example:

In Spark-scala:

val start_date="2020-01-01"
val end_date="2020-02-02"
val query=s"""select * from tempView where timestamp between'$start_date' and '$end_date'"""
print (query)
//select * from tempView where timestamp between'2020-01-01' and '2020-02-02'

spark.sql(query)

In Pyspark:

start_date="2020-01-01"
end_date="2020-02-02"
query="""select * from tempView where timestamp between'0' and '1'""".format(start_date,end_date)

print(query)
#select * from tempView where timestamp between'2020-01-01' and '2020-02-02'

#use same query in spark.sql
spark.sql(query)

【讨论】:

我尝试了第二个选项。我在“query=”之前添加了“val”,打印输出显示select * from tempView where timestamp between'0' and '1' 我认为您正在使用 scala 解释器,然后使用 val query=s"""select * from tempView where timestamp between'$start_date' and '$end_date'"""【参考方案2】:

它在 PySpark 中。

start_date="2020-01-01"
end_date="2020-02-02"
q="select * from tempView where timestamp between'0' and '1'".format(start_date,end_date)

print(q)

这里是在线运行版本:https://repl.it/repls/FeistyVigorousSpyware

【讨论】:

以上是关于如何打印出 spark.sql 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确处理 spark.sql.AnalysisException

如何将 spark sql 查询结果映射到对象?

如何在 Scala 中使用 Spark SQL 返回多个 JSON 对象

如何打印出包含对象的向量?

你如何打印出 Core Data 对象?

如何在 spark sql 的配置单元上下文对象中查找已登录/已连接/当前用户?