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

Need to convert Informatica reg_extract expression to Pyspark dataframe

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

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 的新手。请帮忙。

您可以使用 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))