Pyspark-返回每个sub_area的空值最大的前三列

时间:2018-07-29 22:05:40

标签: pyspark pyspark-sql databricks

我有一个数据框,其列之一是sub_area。 我需要为每个sub_area返回最大数量为null的前3列。 我无法找到空值,所以我收集了每个sub_area的行数和每个sub_area的每一列中的有效行数,因此我基本上需要互相减法,但是我没有找到获取列名的方法。

from pyspark.sql.functions import col, count, isnan, lit, sum,collect_list,instr,locate
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('/FileStore/tables/train1.csv')

def count_not_null(c, nan_as_null=True):
    pred = col(c).isNotNull() & (~isnan(c) if nan_as_null else lit(True))
    return sum(pred.cast("integer")).alias(c)

valid_input= df.groupBy(['sub_area']).agg(*[count_not_null(c) for c in     df.columns]).sort(['sub_area']).collect()
all_count= df.groupBy(['sub_area']).count().sort(['sub_area']).collect()

print all_count[0]
print valid_input[0]

我得到: 行(sub_area = u'Ajeroport',count = 123) 行(sub_area = u'Ajeroport',id = 123,timestamp = 123,full_sq = 123,life_sq = 122,floor = 123,max_floor = 76,material = 76,build_year = 75,num_room = 76,kitch_sq = 76,状态= 72,product_type = 123,sub_area = 123,area_m = 123,...........等等)

有关如何正确执行操作的任何帮助?

0 个答案:

没有答案