В более новой версии Apache Spark SparkSession можно использовать без инициализации.

Example: spark.read.parquet("/pathToParquet")

Но рекомендуется следовать шаблону компоновщика и создавать новый сеанс Spark перед использованием переменной spark.

Шаблон Строителя

import org.apache.spark.sql.SparkSession
val spark = SparkSession
 .builder()
 .appName("yourAppName")
 .enableHiveSupport()
 .getOrCreate()
 
spark.read.parquet("/pathToParquet")

Первое преимущество заключается в том, что когда несколько заданий выполняются одновременно, AppName поможет различать журналы. Кроме того, это поможет в уведомлении Microsoft Teams.

Помимо этого, Spark Session также позволяет использовать настраиваемые атрибуты, которые будут очень удобны для обмена данными между Scala и PySpark.

Пример:

val spark = SparkSession
   .builder()
   .appName("yourAppName")
   .enableHiveSupport()
   .getOrCreate()
   
spark.conf.set("my_startDt","2021-05-06")
spark.conf.set("my_endDt","2021-05-06")

Теперь, что происходит, сеанс Spark имеет 2 настраиваемые переменные, которые могут быть прочитаны PySpark, а также Scala в любой момент времени.

%scala
val appName = spark.conf.get("spark.app.name")
val startDt = spark.conf.get("my_startDt")
val endDt = spark.conf.get("my_endDt")
print(f"${startDt},${endDt}")
%python
startDt = spark.conf.get("my_startDt")
endDt = spark.conf.get("my_endDt")
print(f"{startDt}, {endDt}")

Используя метод getAll, можно прочитать и отобразить все значения конфигурации искры за один раз.

%scala
val configMap = spark.conf.getAll
configMap.foreach(println)

Метод 2. Передача переменной / значения из Scala в PySpark

Создайте временное представление из фрейма данных scala.
Считайте значения столбцов из временного представления с помощью PySpark.

%scala
var dfPassData = Seq("2021-05-06").toDF("my_startDt")
                .withColumn("my_endDt",lit("2021-05-06"))
                
dfPassData.createOrReplaceTempView("tmpPassData")

%python
pystartDate=table("tmpPassData").head().my_startDt
pyendDate=table("tmpPassData").head().my_endDt

Больше контента на plainenglish.io