我试图删除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子句中的操作符