Spark: сохранение данных в рамках функции
Я пытаюсь повторно использовать фрейм данных, сохраняя его в функции.
def run() {
val df1 = getdf1(spark: SparkSession)
val df2 = getdf2(spark:SparkSession, df1)
}
def getdf1(spark: SparkSession): DataFrame {
val sqltxt = "select * from emp"
val df1 = spark.sql(sqltxt)
df1.persist
spark.sql("SET spark.sql.hive.convertMetastoreParquet=false")
df1.write.mode(SaveMode.Overwrite).parquet("/user/user1/emp")
df1
}
def getdf2(spark: SparkSession, df1: DataFrame): DataFrame {
// perform some operations
}
Но когда getdf2 выполняется, он снова выполняет все операции. Не уверен, что я здесь что-то не так делаю. Пожалуйста, помогите мне понять сценарий выше. Благодарю.
1 ответ
Я помню, что в scala, когда вы передаете функцию в качестве параметров, функция (в данном случае это df1) будет выполняться каждый раз, когда вы вызываете getdf2. Всякий раз, когда вы вызываете getdf1, все операторы в getdf1 выполнялись снова. Вот почему вы снова видите те же самые операции.
Прочтите главу 5 Первоклассные функции <>