从文件中读取规则并将这些规则应用于pyspark数据帧行
我有一本csv规则手册,数据如下:从文件中读取规则并将这些规则应用于pyspark数据帧行,pyspark,apache-spark-sql,pyspark-sql,aws-glue,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Sql,Aws Glue,Pyspark Dataframes,我有一本csv规则手册,数据如下: operator|lastname|operator|firstname|val equals | ABC |contains| XYZ | 2 equals | QWE |contains| rty | 3 因此,如果lastname等于ABC,并且firstname类似于XYZ,那么val将是2,就像那样。此文件可以更改或修改,因此条件将是动态的。将来甚至可以添加行 现在,我的pyspark数据帧是: lastna
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
请记住,规则手册是动态的,可以随时添加、删除或修改规则。甚至规则手册中的运算符也可以修改。
提前感谢使用csv解析器解析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
我相信你可以通过下面的过程来实现
通过这种方式,您可以在需要时更新文本文件中的sql语句Hi是否有理由将规则保留在df中?例如,是否存在生成这些规则的动态机制?或者也可以将它们存储到单个文件中?