如何在 Pyspark 中以编程方式使用“计数”?

Posted

技术标签:

【中文标题】如何在 Pyspark 中以编程方式使用“计数”?【英文标题】:How Do I Programmatically Use "Count" In Pyspark? 【发布时间】:2021-03-26 13:51:39 【问题描述】:

尝试以编程方式在 Pyspark 中进行简单计数,但出现错误。如果我放弃AS (count(city)).count() 在语句末尾起作用,但我需要计数出现在内部而不是外部。

result = spark.sql("SELECT city AS (count(city)) AND business_id FROM business WHERE city = 'Reading'") 

许多错误之一

Py4JJavaError: An error occurred while calling o24.sql.
: org.apache.spark.sql.catalyst.parser.ParseException: 
mismatched input '(' expecting ')'(line 1, pos 21)

== SQL ==
SELECT city AS (count(city)) AND business_id FROM business WHERE city = 'Reading'
---------------------^^^

【问题讨论】:

【参考方案1】:

您的语法不正确。也许你想这样做:

result = spark.sql("""
    SELECT 
        count(city) over(partition by city), 
        business_id 
    FROM business 
    WHERE city = 'Reading'
""")

如果您使用count 而不使用group by,则需要提供一个窗口。在这种情况下,您可能需要对每个城市进行计数。

【讨论】:

老大这个解决方案对我不起作用,但我需要使用我需要编写的代码。它给我一个列中的计数和另一列中的所有业务 ID。我将在下面添加我的解决方案,但如果我能让这个工作对你表示敬意。谢谢。【参考方案2】:

只是我要解决的问题的解决方案。上面的解决方案是我想要的。

result = spark.sql("SELECT count(*) FROM business WHERE city='Reading'")

【讨论】:

以上是关于如何在 Pyspark 中以编程方式使用“计数”?的主要内容,如果未能解决你的问题,请参考以下文章

在c#中以编程方式查询网卡的入站/出站IPv4数据包计数统计

在pyspark中以分布式方式有效地生成大型DataFrame(没有pyspark.sql.Row)

如何在 GNU Make 中以编程方式定义目标?

在 Objective-C 中以动态和编程方式调整 UIView 的大小

如何在 CUDA 中以编程方式获取卡规格

如何在 Swift 中以编程方式将 UILabel 对象居中?