【问题标题】:Need to convert Informatica reg_extract expression to Pyspark dataframe需要将 Informatica reg_extract 表达式转换为 Pyspark 数据帧
【发布时间】: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 的新手。请帮忙。

【问题讨论】:

标签: pyspark pyspark-sql informatica-powercenter


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多