Trasferire dati all'esterno dell'area di lavoro di Synapse usando il connettore PySpark

Completato

È possibile trasferire dati da e verso un pool SQL dedicato usando un connettore Pyspark, attualmente compatibile con Scala.

Si supponga di aver creato o caricato un dataframe denominato "pyspark_df" e di voler scrivere tale dataframe nel data warehouse. Come si esegue questa attività?

La prima cosa da fare è creare una tabella temporanea in un dataframe in PySpark tramite il metodo createOrReplaceTempView

pyspark_df.createOrReplaceTempView("pysparkdftemptable")

Il parametro passato è il nome della tabella temporanea, che in questo caso si chiama "pysparkdftemptable". Si sta ancora usando il dataframe pyspark_df, come si può vedere all'inizio dell'istruzione. A questo punto, è necessario eseguire una cella Scala nel notebook PySpark tramite magic. Poiché vengono usati linguaggi diversi, l'esecuzione funzionerà solo in Scala:

%%spark
val scala_df = spark.sqlContext.sql ("select * from pysparkdftemptable")
scala_df.write.sqlanalytics("sqlpool.dbo.PySparkTable", Constants.INTERNAL)

Usando "val scala_df" si crea un valore fisso per scala_dataframe e quindi si usa l'istruzione "select * from pysparkdftemptable", che restituisce tutti i dati creati nella tabella temporanea nel passaggio precedente e li archivia in una tabella denominata sqlpool.dbo.PySparkTable

Nella seconda riga del codice sono stati specificati i parametri seguenti:

  • DBName: nome del database denominato sqlpool nell'esempio precedente
  • Schema: nome dello schema denominato dbo nell'esempio precedente
  • TableName: nome della tabella denominata PySparkTable nell'esempio precedente
  • TableType: specifica il tipo di tabella, che ha il valore Constants.INTERNAL, correlato a una tabella gestita nel pool SQL dedicato.

Se si vogliono leggere i dati usando il connettore PySpark, tenere presente che prima si leggono i dati usando Scala e quindi si scrive in una tabella temporanea. Infine si usa Spark SQL in PySpark per eseguire query sulla tabella temporanea in un dataframe.