apache-spark - 检查列是否有正确的小数

标签 apache-spark pyspark apache-spark-sql 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有任何其他值,则为0test_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/

相关文章:

python - Spark 会立即丢弃临时 rdd 吗?

Scala:未指定的值参数证据$3

scala - Spark unionAll 多个数据帧

hadoop - 由于空间问题导致 Spark 作业失败

python - 用于Python(PySpark)的Spark的自定义Hadoop配置?

apache-spark - 将 Spark 控制台日志重定向到文件

python - 在 EMR 中运行 Jupyter 笔记本时没有名为 'pyspark' 的模块

scala - Spark 中的星期几日期格式字符串 java

scala - 无法将 Spark RDD 转换为 Schema RDD

python - 使用 groupBy 和过滤器创建新数据框