Pyspark-SQL 与 Pyspark 使用 Delta 格式的查询表有啥区别?

Posted

技术标签:

【中文标题】Pyspark-SQL 与 Pyspark 使用 Delta 格式的查询表有啥区别?【英文标题】:What is the difference between queering tables using Delta format with Pyspark-SQL versus Pyspark?Pyspark-SQL 与 Pyspark 使用 Delta 格式的查询表有什么区别? 【发布时间】:2019-06-07 15:01:35 【问题描述】:

我正在查询表,但我使用两种方式得到了不同的结果,我想了解原因。

我使用 Delta 位置创建了一个表。我想查询存储在该位置的数据。我正在使用亚马逊 S3。

我这样创建表:

spark.sql("CREATE TABLE bronze_client_trackingcampaigns.TRACKING_BOUNCES (ClientID INT, SendID INT, SubscriberKey STRING) USING DELTA LOCATION 's3://example/bronze/client/trackingcampaigns/TRACKING_BOUNCES/delta'")

我想使用下一行查询数据:

spark.sql("SELECT count(*) FROM bronze_client_trackingcampaigns.TRACKING_BOUNCES")

但是结果不行,应该是41832却返回1。

当我以其他方式进行相同的查询时:

spark.read.option("header", True).option("inferSchema", True).format("delta").table("bronze_client_trackingcampaigns.TRACKING_BOUNCES").count()

我得到了41832的结果。

我目前的结果是:

我希望两种方式都得到相同的结果。

【问题讨论】:

【参考方案1】:

返回的 1 实际上是行数,而不是实际结果。将sql语句改为:

df = spark.sql("SELECT COUNT(*) FROM bronze_client_trackingcampaigns.TRACKING_BOUNCES")
df.show()

您现在应该得到相同的结果。

【讨论】:

以上是关于Pyspark-SQL 与 Pyspark 使用 Delta 格式的查询表有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

pyspark-sql:打印表达式的别名

我创建了一个文件来访问所有全局变量。我无法访问 pyspark-sql 查询中定义的 UDF 中的全局变量

在 pyspark sql 的连接中重复使用相同的数据框视图

Pyspark 解析高度嵌套的 json (Prometheus)

如何检查一个短语是不是是英文的

Pyspark:与使用 pandas 创建数据帧相比,为啥使用 pyspark 创建数据帧需要更多时间 [重复]