spark sql count(*)查询存储结果

时间:2017-08-01 23:22:36

标签: sql apache-spark apache-spark-sql

您好我使用Spark和Python,我在数据框上执行了基本的计数(*)查询,如下所示

myquery = sqlContext.sql("SELECT count(*) FROM myDF")

结果是

+--------+
|count(1)|
+--------+
|    3469|
+--------+

如何保存此值以执行进一步操作。

例如将3469除以24 [无论24意味着什么......]

6 个答案:

答案 0 :(得分:2)

鉴于你有dataframe

+-----+
|count|
+-----+
|3469 |
+-----+

您可以使用.withColumn api

对列执行数学运算并创建新列或覆盖它们
df.withColumn('devided', df.count/24).show(false)

你应该

+-----+------------------+
|count|devided           |
+-----+------------------+
|3469 |144.54166666666666|
+-----+------------------+

答案 1 :(得分:2)

鉴于您的查询返回dataframe

+-----+
|count|
+-----+
|3469 |
+-----+

您需要获取第一个(也是唯一的)行,然后是其(仅)字段' count'

count = dataframe.first()['count'] 

答案 2 :(得分:1)

>>> myquery = sqlContext.sql("SELECT count(*) FROM myDF").collect()[0][0]
>>> myquery
3469

这只会使您计数。可以转换myquery的更高类型,并在后续查询中使用,例如如果要在输出中显示整个行。

这在pyspark sql中有效。
警告:这会将整个行转储到屏幕上。

>>> sqlContext.sql("SELECT * FROM myDF").show(myquery,False)

答案 3 :(得分:0)

鉴于您的查询将数据框作为

返回
dataFrame.collect()(0).getLong(0)

答案 4 :(得分:0)

将计数别名为另一个名称并按以下方式使用将很有用:

        countvar = sqlContext.sql("""SELECT count(*) as cnt FROM 
myDF""").first()["cnt"]
        print(countvar/24)
    
        countvar = sqlContext.sql("""SELECT count(*) as nullcnt FROM 
    myDF where id is null""").first()["nullcnt"]
        print(100*(nullcount/countvar))
    
        countvar = sqlContext.sql("""SELECT  count(distinct(id)) as idcnt 
FROM myDF """).first()["idcnt"]
        print(idcnt))

答案 5 :(得分:-1)

在数据帧上使用count方法会将一个int返回给你的spark驱动程序

row_count = df.count()
whatever = row_count / 24