需要将 Informatica reg_extract 表达式转换为 Pyspark 数据帧

Posted

技术标签:

【中文标题】需要将 Informatica reg_extract 表达式转换为 Pyspark 数据帧【英文标题】:Need to convert Informatica reg_extract expression to Pyspark dataframe 【发布时间】:2019-08-08 09:40:57 【问题描述】:

我有一个场景,我需要将 Informatica 映射(源和目标 SQL Server)转换为 Pyspark 代码(源 blob 文件和目标 Hive)。在表达式转换中,一列包含“reg_extract”函数,我需要将其转换为 Pyspark 数据框。我的最终目标是在 Hive 中创建与在 SQL Server 中相同的表。

Pyspark 中 reg_extract 函数的替代品是什么?我正在使用 Pyspark 2。

以下是来自 Informatica 表达式转换的代码(用于一列变量字段):

LTRIM(RTRIM(IIF(instr(v_DATE,'AMENDED')>0,
reg_Extract(DATE,'.*(^\w+\s+[0-9]2[,]\s+[0-9]4|^\w+\s+[0-9]1[,]\s+[0-9]4).*'),
reg_Extract(DATE,'.*((\s0?[1-9]|1[012])[./-](0?[1-9]|[12][0-9]|3[01])[./-][0-9]2,4|(^0?[1-9]|1[012])[./-](0?[1-9]|[12][0-9]|3[01])[./-][0-9]2,4|(0[1-9]|[12][0-9]|3[01])[./-](0?[1-9]|1[012])[./-][0-9]2,4|\s\w+\s+(0?[1-9]|[12][0-9]|3[01])[.,](\s+)?[0-9]4|^\w+\s+(0?[1-9]|[12][0-9]|3[01])[.,](\s+)?[0-9]4|^(19|20)[0-9]2|^[0-9]2\s+\w+\s+[0-9]4|^[0-9]6|^(0?[1-9]|[12][0-9]|3[01])\s+\w+[.,]?\s+(19|20)[0-9]2|^[0-9]1,2[-,/]\w+[-,/][0-9]2,4).*'))))

在 Pyspark 中,我将源文件保存在一个数据框中并选择了所需的列。之后我无法继续。

input_data=spark.read.csv(file_path,header=True)
input_data.createOrReplaceTempView("input_data")

df_test = "select ACCESSION_NUMBER, DATE, REPORTING_PERSON from input_data"

df = sqlContext.sql(df_test)

我是 Pyspark/SparkSQL 的新手。请帮忙。

【问题讨论】:

你可能想看这里:***.com/questions/46410887/… 【参考方案1】:

你可以使用regexp_extract:

df = df.withColumn('New_Column_Name', regexp_extract(col('Date'), '.*(^\w+\s+[0-9]2[,]\s+[0-9]4|^\w+\s+[0-9]1[,]\s+[0-9]4).*', 1))

Related question

【讨论】:

以上是关于需要将 Informatica reg_extract 表达式转换为 Pyspark 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Informatica 是不是可以将值从 informatica 映射动态传递到 oracle 中的视图

Informatica抽取SQL Server数据库乱码

如何将sql代码更改为informatica进程

informatica安装简易手册

informatica 聚合器路由器和表达式

Informatica学习:2配置存储库服务和集成服务