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

从文件中读取规则并将这些规则应用于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

我有一本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
请记住,规则手册是动态的,可以随时添加、删除或修改规则。甚至规则手册中的运算符也可以修改。
提前感谢

使用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
我相信你可以通过下面的过程来实现
  • 在数据帧顶部创建临时表
  • 使用Spark SQL api编写SQL,并将其作为单个记录保存在文本文件中
  • 使用以下命令读取sql语句 sqlStatement=spark.sparkContext.textFile(“sqllocation”).first().toString() 您在步骤#2中进行了准备,并使用spark.sql(sqlStatement)运行它

  • 通过这种方式,您可以在需要时更新文本文件中的sql语句

    Hi是否有理由将规则保留在df中?例如,是否存在生成这些规则的动态机制?或者也可以将它们存储到单个文件中?