簡體   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