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(「12」)のために働いていません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

を使用して、その後、UDF内のコードを結合しているdecimal.Decimal()

で小数点以下のトークンを解析することができますそのような場合は0を返します。 –

+0

おお私はそれをチェックしなかった!私は今答えを更新しました。 @rajatsaxena – mrsrinivas

+0

上記のシナリオと完全に一致しているので、値12.0の解を持つことができるかどうかをチェックしたかっただけです。この場合、10進数とみなす必要がありますが、現在の解はそれを10進数として認識しません。 –