从文件中读取规则并将这些规则应用于 pyspark 数据框行

Posted

技术标签:

【中文标题】从文件中读取规则并将这些规则应用于 pyspark 数据框行【英文标题】:Read Rules from a file and apply those rules to pyspark dataframe rows 【发布时间】:2019-09-25 14:00:05 【问题描述】:

我有一个规则手册 csv,数据如下所示:

operator|lastname|operator|firstname|val

equals    | ABC    |contains| XYZ     | 2

equals  | QWE    |contains| rty     | 3

所以如果 lastname 等于 ABC 和 firstname 像 XYZ 那么 val 将是 2 ,就像那样。此文件可以更改或修改,因此条件将是动态的。将来甚至可以添加行。

现在,我的 pyspark 数据框是:

lastname| firstname| service

ABC     | XYZNMO   | something

QUE     | rtysdf   | something

我需要将该 csv 文件中的规则应用于此数据框并添加 val 列。所以我想要的输出数据框将是:

lastname| firstname| service  | val

ABC     | XYZNMO   | something| 2

QUE     | rtysdf   | something| 3

请记住,规则手册是动态的,可以随时添加、删除或修改规则。甚至可以修改规则手册中的运算符。 提前致谢

【问题讨论】:

嗨,有什么理由将规则保存到 df 中?例如,是否有任何动态机制生成这些规则?或者您也可以将它们存储到一个文件中? 【参考方案1】:

使用 csv parser 解析 csv 文件并获取规则数据。然后以编程方式,使用规则数据创建 SQL 语句 - 类似于:

query = "SELECT
        CASE WHEN lastname = 'ABC' and firstname LIKE 'XYZ%' THEN 2
             ELSE
                 CASE WHEN lastname = 'QUE' and firstname LIKE 'rty% THEN 3
             END
        END AS val
    FROM table"

然后运行:

df.createOrReplaceTempView("table")
result_df = spark.sql(query) # above dynamic query

【讨论】:

【参考方案2】:

我相信您可以使用以下过程来实现它

    在数据框之上创建临时表 使用 Spark SQL api 编写 SQL 并将其作为单个记录保存在文本文件中 使用读取 sql 语句 sqlStatement=spark.sparkContext.textFile("sqllocation").first().toString() 您在步骤#2 中准备并使用 spark.sql(sqlStatement) 运行它

这样您可以根据需要更新文本文件中的 sql 语句

【讨论】:

以上是关于从文件中读取规则并将这些规则应用于 pyspark 数据框行的主要内容,如果未能解决你的问题,请参考以下文章

如何从一个数据框中获取规则并将其应用于其他数据框以获取 python 中的统计信息?

Firebase 安全规则混乱

从 S3 读取大型 JSON 文件 (3K+) 并从数组中选择特定键

从源文件生成目标文件的通用“make”规则

我们如何在 pyspark 的不同模块中使用相同的连接数据框用法

使用规则从节点视图“另存为”多个文件