我有一个数据框(input_dataframe),如下所示:
id test_column
1 0.25
2 1.1
3 12
4 test
5 1.3334
6 .11
我想添加一列结果,如果test_column具有十进制值,则该列将值1并且如果test_column有任何其他值,则为0。 test_column的数据类型是字符串。以下是预期输出:
id test_column result
1 0.25 1
2 1.1 1
3 12 0
4 test 0
5 1.3334 1
6 .11 1
我们可以使用 pySpark 代码来实现它吗?
最佳答案
您可以使用decimal.Decimal()
解析十进制标记
这里我们将代码绑定(bind)到 UDF 内,然后使用 df.withColumn
import decimal
from pyspark.sql.types import IntType
def is_valid_decimal(s):
try:
# return (0 if decimal.Decimal(val) == int(decimal.Decimal(val)) else 1)
return (0 if decimal.Decimal(val)._isinteger() else 1)
except decimal.InvalidOperation:
return 0
# register the UDF for usage
sqlContext.udf.register("is_valid_decimal", is_valid_decimal, IntType())
# Using the UDF
df.withColumn("result", is_valid_decimal("test_column"))
关于apache-spark - 检查列是否有正确的小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46598685/