Привет всем (начинающий pyspark здесь), у меня есть такой код в моей записной книжке jupyter:
# df is a spark dataframe
def mySaveData(pandasDataFrame):
df = spark.createDataFrame(pandasDataFrame)
df.createOrReplaceTempView('data')
df = spark.sql('select id, value from data')
df.write.parquet('mydata.parquet', mode='overwrite')
Функция работает отлично.Однако, если я переместу функцию в файл .py и импортирую ее в свой блокнот для использования, функция не будет знать, что означает переменная «искра».Итак, я протестировал разные подходы.Я попытался передать искру в качестве параметра, и через долгое время она вылетает.
# df is a spark dataframe
def mySaveData(spark, pandasDataFrame):
Я также попытался поместить что-то подобное в начало файла .py безуспешно:
import org.apache.spark.SparkContext
sc = SparkContext.getOrCreate()
spark = SparkSession.builder.config(conf=conf).getOrCreate()
Единственное, что работает, это добавление этой строки в мой блокнот.Тем не менее, он работает только несколько раз, и иногда процесс прерывается из-за превышения объема используемой оперативной памяти (у моего информационного кадра всего несколько МБ, а инфраструктура моей компании очень велика).
sc.addPyfile('myfile.py')
Итак, возможно, у меня возникла концептуальная проблема.Добавляет ли файл .py неправильно?Мне интересно, выполняется ли mySaveData () всеми работниками одновременно.Кто-нибудь может мне помочь?
PS: Обычно мне не нужно объявлять переменные sc и spark.Контексты уже созданы с этими точными именами (я не знаю, как).