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提供解決方案,在這種情況下應該將其視爲十進制,但目前的解決方案無法將其識別爲十進制。 –

相關問題