我在Azure Synapse中有一个笔记本,它使用synapsesql函数将parquet文件读取到 Dataframe 中,然后将 Dataframe 内容推送到SQL池中的表中。
手动执行notebook是成功的,表被创建并填充到Synapse SQL池中。
当我尝试从Azure Synapse管道调用同一个notebook时,它返回成功,但不创建表。我正在使用管道中的Synapse Notebook活动。
有什么问题吗?
我在synapsesql函数周围得到了不推荐使用的警告,但不知道实际上什么是不推荐使用的。
代码在下面。
%%spark
val pEnvironment = "t"
val pFolderName = "TestFolder"
val pSourceDatabaseName = "TestDatabase"
val pSourceSchemaName = "TestSchema"
val pRootFolderName = "RootFolder"
val pServerName = pEnvironment + "synas01"
val pDatabaseName = pEnvironment + "syndsqlp01"
val pTableName = pSourceDatabaseName + "" + pSourceSchemaName + "" + pFolderName
// Import functions and Synapse connector
import org.apache.spark.sql.DataFrame
import com.microsoft.spark.sqlanalytics.utils.Constants
import org.apache.spark.sql.functions.
import org.apache.spark.sql.SqlAnalyticsConnector.
// Get list of "FileLocation" from control.FileLoadStatus
val fls:DataFrame = spark.read.
synapsesql(s"${pDatabaseName}.control.FileLoadStatus").
select("FileLocation","ProcessedDate")
// Read all parquet files in folder into data frame
// Add file name as column
val df:DataFrame = spark.read.
parquet(s"/source/${pRootFolderName}/${pFolderName}/").
withColumn("FileLocation", input_file_name())
// Join parquet file data frame to FileLoadStatus data frame
// Exclude rows in parquet file data frame where ProcessedDate is not null
val df2 = df.
join(fls,Seq("FileLocation"), "left").
where(fls("ProcessedDate").isNull)
// Write data frame to sql table
df2.write.
option(Constants.SERVER,s"${pServerName}.sql.azuresynapse.net").
synapsesql(s"${pDatabaseName}.xtr.${pTableName}",Constants.INTERNAL)
2条答案
按热度按时间ffvjumwh1#
这种情况经常发生,并在管道执行后获得输出。按照上面提到的步骤。
1.从pipeline的输出中获取Apache Spark应用程序名称
1.导航到Monitor选项卡下的Apache Spark Application并搜索相同的应用程序名称。
1.这4个选项卡将在那里提供:诊断、故障诊断、输入数据、输出数据
1.转到插件检查'stdout'以获取所需的输出。
https://www.youtube.com/watch?v=ydEXCVVGAiY
查看上面的视频链接,了解详细的实时程序。
xzv2uavs2#
在我的组织中,Synapse中有很多管道失败。
要搜索的错误代码:java.lang.IllegalArgumentException:错误:您访问的页面不存在口译员死亡:
根本原因,Spark版本最近更新了。Synapse中的Apache Spark池升级到最新版本,Pipelines开始失败,击中笔记本电脑并死亡
问题(我认为)是Apache Spark配置存在于管道中的Notebook Activity上。没有办法直接为笔记本更新spark版本。
解决方案:将管道中Notebook Activity的设置中的Apache Spark“Spark Pool”配置更改为不同的池,发布。把它改回原来的游泳池,发布。这会强制更新spark版本的配置。
这个解决方案以最小的努力修复了我们包含笔记本的管道。