pyspark - 将 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 转换。
解决方案
我看不到整个语句,但您的解码逻辑是 - 如果(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
推荐阅读
- php - PHP if/elseif 语句未按预期工作
- terraform - helm chart 的 Terraform 安装
- html - html页面渲染chrome vs IE
- distance - 德鲁伊查询计算每个相邻行的距离
- python - 'pylint' 不是内部或外部命令、可运行程序或批处理文件
- r - 如何正确使用 addResourcePath?
- javascript - 如何从字符串中提取年龄?
- angular - 离子/角度嵌套路由器出口:routerLinks 只工作一次
- amazon-web-services - aws Auto Scaling 在扩大应用程序不可用之前删除不健康的实例
- html - 是否可以使用 HTML 和 CSS 滚动到可滚动 div 内的哈希锚?