您好我使用Spark和Python,我在数据框上执行了基本的计数(*)查询,如下所示
myquery = sqlContext.sql("SELECT count(*) FROM myDF")
结果是
+--------+
|count(1)|
+--------+
| 3469|
+--------+
如何保存此值以执行进一步操作。
例如将3469除以24 [无论24意味着什么......]
答案 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