Aracılığıyla paylaş


Scala için Databricks Bağlan kullanıcı tanımlı işlevler

Not

Bu makalede Databricks Runtime 14.1 ve üzeri için Databricks Bağlan yer alır.

Bu makalede Scala için Databricks Bağlan ile kullanıcı tanımlı işlevlerin nasıl yürütüldiği açıklanır. Databricks Bağlan popüler IDE'leri, not defteri sunucularını ve özel uygulamaları Azure Databricks kümelerine bağlamanızı sağlar. Bu makalenin Python sürümü için bkz. Python için Databricks Bağlan'da kullanıcı tanımlı işlevler.

Not

Databricks Bağlan kullanmaya başlamadan önce Databricks Bağlan istemcisini ayarlamanız gerekir.

Databricks Runtime 14.1 ve üzeri için, Scala için Databricks Bağlan kullanıcı tanımlı işlevlerin (UDF) çalıştırılmasını destekler.

Bir UDF çalıştırmak için, UDF'nin gerektirdiği derlenmiş sınıfın ve JAR'lerin kümeye yüklenmesi gerekir. addCompiledArtifacts() API, karşıya yüklenmesi gereken derlenmiş sınıfı ve JAR dosyalarını belirtmek için kullanılabilir.

Not

İstemci tarafından kullanılan Scala, Azure Databricks kümesindeki Scala sürümüyle eşleşmelidir. Kümenin Scala sürümünü denetlemek için Databricks Runtime sürüm notları sürümleri ve uyumluluğunda kümenin Databricks Runtime sürümünün "Sistem Ortamı" bölümüne bakın.

Aşağıdaki Scala programı, bir sütundaki değerlerin karesini alan basit bir UDF ayarlar.

import com.databricks.connect.DatabricksSession
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.{col, udf}

object Main {
  def main(args: Array[String]): Unit = {
    val sourceLocation = getClass.getProtectionDomain.getCodeSource.getLocation.toURI

    val spark = DatabricksSession.builder()
      .addCompiledArtifacts(sourceLocation)
      .getOrCreate()

    def squared(x: Int): Int = x * x

    val squared_udf = udf(squared _)

    spark.range(3)
      .withColumn("squared", squared_udf(col("id")))
      .select("squared")
      .show()
  }
}

Yukarıdaki örnekte, UDF tamamen içinde Mainbulunduğundan yalnızca derleme yapıtı Main eklenir. UDF diğer sınıflara yayılıyorsa veya dış kitaplıklar (örn. JAR' ler) kullanıyorsa, bu kitaplıkların tümü de dahil edilmelidir.

Spark oturumu zaten başlatıldığında, API kullanılarak spark.addArtifact() daha fazla derlenmiş sınıflar ve JAR'ler karşıya yüklenebilir.

Not

JAR'leri karşıya yüklerken, karşıya yükleme için tüm geçişli bağımlılık JAR'leri dahil edilmelidir. API'ler geçişli bağımlılıkları otomatik olarak algılamaz.

Yazılan Veri Kümesi API'leri

UDF'ler için önceki bölümde açıklanan mekanizma, yazılan Veri Kümesi API'leri için de geçerlidir.

Yazılan Veri Kümesi API'leri, sonuçta elde edilen Veri Kümeleri üzerinde eşleme, filtre ve toplama gibi dönüştürmeleri çalıştırmaya olanak sağlar. Bunlar ayrıca Databricks kümesindeki UDF'lere benzer şekilde yürütülür.

Aşağıdaki Scala uygulaması, sonuç sütunundaki map() bir sayıyı ön ekli dize olarak değiştirmek için API'yi kullanır.

import com.databricks.connect.DatabricksSession
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.{col, udf}

object Main {
  def main(args: Array[String]): Unit = {
    val sourceLocation = getClass.getProtectionDomain.getCodeSource.getLocation.toURI

    val spark = DatabricksSession.builder()
      .addCompiledArtifacts(sourceLocation)
      .getOrCreate()

    spark.range(3).map(f => s"row-$f").show()
  }
}

Bu örnek API'yi map() kullansa da, bu, , mapPartitions()vb. gibi filter()diğer türdeki Veri Kümesi API'leri için de geçerlidir.