nam*_*nam 10 python pandas apache-spark azure-sql-database azure-databricks
在以下示例代码中,在one cell
我们的Azure Databricks笔记本中,代码将大约 2000 万条记录从 加载到Python pandas 中,通过应用一些函数执行一些数据帧列转换(如下面的代码片段所示)。但运行代码大约半小时后,Databricks 抛出以下错误:dataframe
Azure SQL db
错误:
ConnectException: Connection refused (Connection refused)
Error while obtaining a new communication channel
ConnectException error: This is often caused by an OOM error that causes the connection to the Python REPL to be closed. Check your query's memory usage.
Run Code Online (Sandbox Code Playgroud)
备注:表大约有 150 列。Databricks上的集群Spark setting
如下
:128 GB , 16 Cores, DBR 8.3, Spark 8.3, Scala 2.12
问题:导致该错误的原因可能是什么?我们该如何修复它?
import sqlalchemy as sq
import pandas as pd
def fn_myFunction(lastname):
testvar = lastname.lower()
testvar = testvar.strip()
return testvar
pw = dbutils.secrets.get(scope='SomeScope',key='sql')
engine = sq.create_engine('mssql+pymssql://SERVICE.Databricks.NONPUBLICETL:'+pw+'MyAzureSQL.database.windows.net:1433/TEST', isolation_level="AUTOCOMMIT")
app_df = pd.read_sql('select * from MyTable', con=engine)
#create new column
app_df['NewColumn'] = app_df['TestColumn'].apply(lambda x: fn_myFunction(x))
.............
.............
Run Code Online (Sandbox Code Playgroud)
首先,我们可以了解驱动程序节点出现 OOM 问题的最常见原因。
导致此错误的一个常见原因是驱动程序遇到内存瓶颈。发生这种情况时,驱动程序会因内存不足 (OOM) 情况而崩溃,并重新启动或由于频繁的完整垃圾收集而变得无响应。内存瓶颈的原因可能是以下任一原因:
为什么你的情况会发生这种情况?
当我们通过 处理任何数据集时Pandas
,它在单台机器(驱动程序节点)上运行操作,而不是像 PySpark 在多台机器上运行。如果你正在处理更大的数据集,通过 python pandas,无论集群有多大。因此可以增加驱动节点的内存大小或以分布式模式进行处理。
归档时间: |
|
查看次数: |
16268 次 |
最近记录: |