Pyspark数据框架.在哪里过滤,但得到缺失的行



我试图删除HVA_label_list列长度为0的行,其中HVA_label_list是一个嵌套的数组列。

$ result.printSchema()
root
|-- customer_id: string (nullable = true)
|-- HVA_label_list: array (nullable = true)
|    |-- element: array (containsNull = true)
|    |    |-- element: string (containsNull = true)

然后我首先通过将其直接转换为pandas来检查结果

$ result_pd = result.toPandas()
$ print(len(result_pd))
$ print(np.sum([len(i) for i in result_pd['HVA_label_list'].values]))
$ print(np.sum([len(i)>0 for i in result_pd['HVA_label_list'].values]))
$ result_pd.head()        
168866
37716
32913
customer_id                               HVA_label_list
0  10125935022                                           []
1  10808619122                                           []
2  12143532522  [[VISIT_CHECKOUT_AMAZON_POINTS_PAGE, 0, 0]]
3  14471395022                                           []
4  14695903222                                           []

这看起来很好。我应该有32913行,如果我用filter的话。然后写入

result2 = result.where(size(col("HVA_label_list")) > 0)
result2_pd = result2.toPandas()
$print(len(result2_pd))
10636

我不知道哪里出了问题。实际上,当我试图爆炸HVA_label_list时,也会出现类似的问题。我只得到大约10k行,但37716预期。

我认为您正在尝试过滤Spark DataFrame以删除HVA_label_list列长度为0的行。你可以使用size函数和>DataFrame过滤器转换的where子句中的操作符

相关内容

  • 没有找到相关文章

最新更新