检查列是否具有正确的十进制数

时间:2017-10-06 05:16:19

标签: apache-spark pyspark spark-dataframe user-defined-functions

我有一个数据框( 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代码实现吗?

1 个答案:

答案 0 :(得分:2)

您可以使用decimal.Decimal()

分析十进制标记

这里我们使用df.withColumn

绑定UDF中的代码
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"))