计算PySparkSQL联接中每个不同值在列中出现的次数

计算PySparkSQL联接中每个不同值在列中出现的次数,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我使用pysparksql将两个表连接在一起,一个包含带有经度和纬度的犯罪地点数据,另一个包含带有相应经度和纬度的邮政编码 我想弄清楚的是如何统计每个邮政编码内发生的犯罪数量。我是PySpark的新手,我的SQL已经生锈了,所以我不确定自己哪里出了问题 我曾尝试使用COUNTDISTINCT,但这只是给出了不同邮政编码的总数 mySchema = StructType([StructField("Longitude", StringType(),True), StructField("Latit

我使用pysparksql将两个表连接在一起,一个包含带有经度和纬度的犯罪地点数据,另一个包含带有相应经度和纬度的邮政编码

我想弄清楚的是如何统计每个邮政编码内发生的犯罪数量。我是PySpark的新手,我的SQL已经生锈了,所以我不确定自己哪里出了问题

我曾尝试使用COUNTDISTINCT,但这只是给出了不同邮政编码的总数

mySchema = StructType([StructField("Longitude", StringType(),True), StructField("Latitude", StringType(),True)])

bgl_df = spark.createDataFrame(burglary_rdd, mySchema)

bgl_df.registerTempTable("bgl")

rdd2 = spark.sparkContext.textFile("posttrans.csv")

mySchema2 = StructType([StructField("Postcode", StringType(),True), StructField("Lon", StringType(),True), StructField("Lat", StringType(),True)])

pcode_df = spark.createDataFrame(pcode_rdd, mySchema2)

pcode_df.registerTempTable("pcode")

count = spark.sql("SELECT COUNT(DISTINCT pcode.Postcode) 
                   FROM pcode RIGHT JOIN bgl 
                   ON (bgl.Longitude = pcode.Lon 
                   AND bgl.Latitude = pcode.Lat)")
相反,我想要的是:

+--------+---+
|Postcode|Num|
+--------+---+
|LN11 9DA| 2 |
|BN10 8JX| 5 |
| EN9 3YF| 9 |
|EN10 6SS| 1 |
+--------+---+

您可以执行groupby计数以获得列的不同值计数:

group_df = df.groupby("Postcode").count()
你会得到你想要的输出

对于SQL查询:

query =  """
         SELECT pcode.Postcode, COUNT(pcode.Postcode) AS Num
         FROM pcode 
         RIGHT JOIN bgl 
         ON (bgl.Longitude = pcode.Lon AND bgl.Latitude = pcode.Lat)
         GROUP BY pcode.Postcode
         """

count = spark.sql(query)

此外,我还从from和JOIN子句中复制了一些内容,以使查询与copy更相关

非常感谢,这正是我想要的!
query =  """
         SELECT pcode.Postcode, COUNT(pcode.Postcode) AS Num
         FROM pcode 
         RIGHT JOIN bgl 
         ON (bgl.Longitude = pcode.Lon AND bgl.Latitude = pcode.Lat)
         GROUP BY pcode.Postcode
         """

count = spark.sql(query)