首页 > 解决方案 > 将 Informatica 转换转换为 Pyspark

问题描述

我正在尝试将 informatica 转换转换为 pyspark 转换,但我被困在替换下面显示的代码中的 char 中:

"DECODE(TRUE,
ISNULL(v_check_neg_**) OR v_check_neg_** = '', 
i_default,
NOT IS_NUMBER(v_check_neg_** , 
i_default,
REPLACECHR(0,v_check_neg_**, '+-0123456789.' ,'')<>'', 
i_default,
TO_DECIMAL(v_check_neg_**,5))


v_check_neg_** = IIF(INSTR(i_string_**,'-')!=0,'-'||SUBSTR(i_string_**,1,INSTR(i_string_**,'-')-1),i_string_**)"

这是我尝试过的:

def is_digit(value):
    if value:
        return value.isdigit()
    else:
        return False

is_digit_udf = udf(is_digit, BooleanType())

df_informatica=df_informatica.withColumn(column_name,when((isnull(col(column_name)) |(col(column_name==' ')),i_default).when(is_digit_udf(col(column_name)),i_default)

df_informatica=df_informatica.withColumn

请帮我将 informatica 转换为 pyspark 转换。

标签: pysparkpyspark-sqlinformaticapyspark-dataframes

解决方案


我看不到整个语句,但您的解码逻辑是 - 如果(v_check_neg_** 为空或 v_check_neg_ ='' 或 v_check_neg_不是数字或 v_check_neg_** 有除数字以外的任何内容)那么 i_default else TO_DECIMAL(v_check_neg_**,5)

使用 python 检查上述情况,你应该很高兴。就像您可以使用 string.isnumeric() 来检查正数一样。并使用 try except 来检查 -ve、decimal 等。例如检查负数 -

def check_negative(s):
    try:
        f = float(s)
        if (f < 0):
            return True
        # Otherwise return false
        return False
    except ValueError:
        return False

推荐阅读