1

我有一个数据帧(input_dataframe),它看起来像如下:检查一列是否具有正确的十进制数

id  test_column 
1   0.25 
2   1.1 
3   12 
4   test 
5   1.3334 
6   .11 

我想增加一列结果,里面放值如果test_column具有十进制值和如果test_column具有任何其他值。数据类型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

您可以分析小数令牌decimal.Decimal()

在这里,我们结合一个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")) 
+0

这个解决方案是不工作的价值decimal.Decimal(“12”),它在这种情况下应该返回0。 –

+0

哦。我没有检查!我现在更新了答案。 @rajatsaxena – mrsrinivas

+0

它与上述场景完美匹配,只是想检查我们是否可以为值12.0提供解决方案,在这种情况下应该将其视为十进制,但目前的解决方案无法将其识别为十进制。 –

相关问题