Преобразование преобразований 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.
0 ответов
Я не могу видеть весь оператор, но ваша логика декодирования - если (v_check_neg_** имеет значение null или v_check_neg_='' или v_check_neg_ не является числом или v_check_neg _ ** имеет что-либо, кроме чисел), то i_default else TO_DECIMAL(v_check_neg_**,5)
Используйте python для проверки вышеуказанных случаев, и все будет в порядке. Как вы можете использовать string.isnumeric() для проверки положительного числа. И используйте try, кроме проверки -ve, decimal и т. Д. Пример проверки отрицательного числа-
def check_negative(s):
try:
f = float(s)
if (f < 0):
return True
# Otherwise return false
return False
except ValueError:
return False