gpt4 book ai didi

apache-spark - 如何在转换期间测试数据类型转换

转载 作者:可可西里 更新时间:2023-11-01 16:24:29 26 4
gpt4 key购买 nike

我们有一个将数据映射到数据框的脚本(我们使用的是 pyspark)。数据以字符串形式传入,并且对它进行了一些其他有时代价高昂的操作,但作为操作的一部分(调用 withColumn),我们对其最终数据类型进行了强制转换。

我需要判断是否发生了截断,但我们不想在截断发生时失败。我们只想要一个数字来知道每个翻译列(大约有 300 列)中有多少行失败。

我的第一个想法是让每一列通过一个 UDF 来进行测试,输出将是一个包含值的数组,以及一个关于它是否通过数据类型检查的值。然后我会做2个选择。一个从数组中选择原始值,另一个聚合未命中的值。但这似乎是一个草率的解决方案。我是 pyspark/hadoop 世界的新手...很想知道是否有更好的(也许是标准的?)方法来做到这一点。

最佳答案

在最新的 Spark 版本中,在 Spark 中转换数字不会失败,也不会导致静默溢出——如果值的格式不正确,或者太大而无法被目标类型容纳,结果是未定义的——NULL

因此,您所要做的就是在 cast 之后对 NULL 值 ( Count number of non-NaN entries in each column of Spark dataframe with Pyspark ) 进行简单计数:

from pyspark.sql.functions import count

df = spark.createDataFrame(['132312312312312321312312', '123', '32'], 'string')
df_cast = df.withColumn('value_casted' , df['value'].cast('integer'))

df_cast.select((
# count('value') - count of NOT NULL values before
# count('value_casted') - count of NOT NULL values after
count('value') - count('value_casted')).alias('value_failed')
).show()
# +------------+
# |value_failed|
# +------------+
# | 1|
# +------------+

关于apache-spark - 如何在转换期间测试数据类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50496975/

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