pyspark 如何计算Spark DataFrame中所有列中None值(字符串数据类型)的单元格数?

relj7zay  于 2022-12-17  发布在  Spark
关注(0)|答案(1)|浏览(145)

我有一个大型数据集,有些列是字符串数据类型。由于打字错误,有些单元格没有值,但写在不同的风格(与小或大写字母,有或没有空格,有或没有括号,等等)。
我想计算所有列中所有这些值(不包括空值)的数量。示例数据集如下:

data = [("A", "None", 1), \
    ("A", "(None)", 2), \
    ("[None", "none", 3), \
    ("(none]", "[None]", 4), \
    ("A", "(none)", 5), \
    ("A", "(none", 6), \
    ("A", "none  ", 7), \
    (" NOne  ", None, None), \
  ]

# Create DataFrame
columns= ["col_1", "col_2", "Number"]
df = spark.createDataFrame(data = data, schema = columns)

预期结果为:

{'col_1': 3, 'col_2': 7, 'Number': 0}

知道PySpark怎么做吗?

jyztefdp

jyztefdp1#

其逻辑是:

  • 使用regex删除列值开始和结束处的所有类型的左括号和右括号。
  • 修剪多余的空格,转换为较低,并与“无”进行比较。
  • 对每列的筛选记录进行计数。
count_result = {}
for c in df.columns:
  count_result[c] = df.select(c).filter(F.lower(F.trim(F.regexp_replace(c, r"(?:^\[|^\(|^\<|^\{|\]$|\)$|\>$|\}$)", ""))) == "none") \
               .count()
  
print(count_result)

输出:

{'col_1': 3, 'col_2': 7, 'Number': 0}

相关问题