gpt4 book ai didi

apache-spark - 如何将空数组转换为空数组?

转载 作者:行者123 更新时间:2023-12-03 15:13:58 27 4
gpt4 key购买 nike

我有以下数据框,我需要将空数组转换为 null。

+----+---------+-----------+
| id|count(AS)|count(asdr)|
+----+---------+-----------+
|1110| [12, 45]| [50, 55]|
|1111| []| []|
|1112| [45, 46]| [50, 50]|
|1113| []| []|
+----+---------+-----------+

我试过下面的代码不起作用。
df.na.fill("null").show()

预期输出应该是
+----+---------+-----------+
| id|count(AS)|count(asdr)|
+----+---------+-----------+
|1110| [12, 45]| [50, 55]|
|1111| NUll| NUll|
|1112| [45, 46]| [50, 50]|
|1113| NUll| NUll|
+----+---------+-----------+

最佳答案

对于您给定的 dataframe ,您可以简单地执行以下操作

from pyspark.sql import functions as F
df.withColumn("count(AS)", F.when((F.size(F.col("count(AS)")) == 0), F.lit(None)).otherwise(F.col("count(AS)"))) \
.withColumn("count(asdr)", F.when((F.size(F.col("count(asdr)")) == 0), F.lit(None)).otherwise(F.col("count(asdr)"))).show()

你应该有输出 dataframe作为
+----+---------+-----------+
| id|count(AS)|count(asdr)|
+----+---------+-----------+
|1110| [12, 45]| [50, 55]|
|1111| null| null|
|1112| [45, 46]| [50, 50]|
|1113| null| null|
+----+---------+-----------+

更新

如果你有两个以上的数组列并且你想动态应用上面的逻辑,你可以使用下面的逻辑
from pyspark.sql import functions as F
for c in df.dtypes:
if "array" in c[1]:
df = df.withColumn(c[0], F.when((F.size(F.col(c[0])) == 0), F.lit(None)).otherwise(F.col(c[0])))
df.show()

这里, df.dtypes会给你带有列名和数据类型的元组数组。至于问题中的数据框,它将是
[('id', 'bigint'), ('count(AS)', 'array<bigint>'), ('count(asdr)', 'array<bigint>')]
withColumn仅应用于数组列 ("array" in c[1])哪里 F.size(F.col(c[0])) == 0when 的条件检查检查数组大小的函数。如果条件为真,即空数组,则填充 None 否则填充原始值。该循环应用于所有数组列。

关于apache-spark - 如何将空数组转换为空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48072323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com