繁体   English   中英

使用 pyspark.sql.functions 没有 sparkContext 导入问题

[英]Using pyspark.sql.functions without sparkContext import problem

我的情况可以简单化为两个文件的示例。

过滤器.py

from pyspark.sql import functions as F
condition = F.col('a') == 1

主文件

from filters import condition
from pyspark.sql import SparkSession

def main():
    spark = SparkSession.builder.getOrCreate()
    table = spark.table('foo').filter(condition)

它的出现,是F.col对象不能没有主动sparkSession / sparkContext对象被创建,因此导入失败。

有什么方法可以将过滤器与其他文件分开,以及如何导入它们?

我的情况有点复杂,这个过滤器在项目中的许多不同功能中使用,所以我不能在每个功能中导入它。 我需要一种方法将它安全地导入到全局命名空间。

您可以将条件创建为字符串:

过滤器.py

condition = "F.col('a') == 123"

然后使用eval运行代码:

主文件

from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from filters import condition


if __name__ == "__main__":
    spark = SparkSession.builder.getOrCreate()
    data = [
        {"id": 1, "a": 123},
        {"id": 2, "a": 23},
    ]
    df = spark.createDataFrame(data=data)
    df = df.filter(eval(condition))

本示例中的结果如预期的那样:

+---+---+
|  a| id|
+---+---+
|123|  1|
+---+---+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM