从文件中读取规则并将这些规则应用于 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 中的统计信息?
从 S3 读取大型 JSON 文件 (3K+) 并从数组中选择特定键