如何在 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)