需要将 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 数据帧的主要内容,如果未能解决你的问题,请参考以下文章