0
在我的代碼中,我嘗試使用env變量在URL處實例化redis-py 連接。問題是,當我使用foreach or foreachPartition時,在#save_on_redis方法中無法識別env變量。Pyspark無法識別env變量作爲參數傳遞給foreach或foreachPartition的方法
我只是嘗試之外創建Redis的關係,但我收到「pickle.PicklingError:無法鹹菜‘鎖定’目標」,因爲火花嘗試運行這兩種方法,在同一時間,所有節點上。
Question: How I can use env variables on the method passed as argument to foreach or foreachPartition ?
import os
from pyspark.sql import SparkSession
import redis
spark = (SparkSession
.builder
.getOrCreate())
print "---------"
print os.getenv("REDIS_REPORTS_URL")
print "---------"
def save_on_redis(row):
redis_ = redis.StrictRedis(host=os.getenv("REDIS_REPORTS_URL"), port=6379, db=0)
print os.getenv("REDIS_REPORTS_URL")
print redis_
redis_.set("#teste#", "fagner")
df = spark.createDataFrame([(0,1), (0,1), (0,2)], ["id", "score"])
df.foreach(save_on_redis)