如何将表直接导入DataRicks中的Python数据帧?

2024-04-29 19:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

目前在DataRicks的开发环境中工作,使用笔记本应用一些Python代码来分析数据库表中的一些虚拟数据(仅1000行),然后我将其部署到主环境,并在真实数据上运行它(100的数百万行)

首先,我只需要满足特定条件的单个列中的值,以便获取我当前正在执行的数据:

  1. spk_data=spark.sql(“从database.table中选择字段,其中字段=='value'”)
  2. data=spk_data.toPandas()

然后Python笔记本的其余部分对数据进行处理,这些数据在开发环境中运行良好,但当我真正运行它时,它在第2行显示内存不足

我想将数据直接导入Pandas数据框,这样就不需要从Spark进行转换,因为我认为这样可以避免错误,但在谷歌搜索了很多次之后,我仍然无法确定如何进行转换,我尝试过的唯一语法有效的方法是:

data=pd.read_表(r'database.table')

但只要得到:

'权限错误:[Errno 13]权限被拒绝:'

(注意:不幸的是,我无法控制我正在查询的数据库的内容、形式或位置)


Tags: 数据代码数据库权限data环境部署错误
2条回答

在这种情况下,必须使用pd.read_sql_query

你的假设很可能是不真实的

Spark是一个分布式计算引擎,pandas是一个单节点工具集。因此,当您在数百万行上运行查询时,很可能会失败。在执行df.toPandas时,Spark会将所有数据移动到驱动程序节点,因此,如果数据超过驱动程序内存,则会出现内存不足异常。换句话说,如果您的数据集比内存大,那么pandas将无法正常工作

此外,在Databrick上使用pandas时,您会失去使用底层集群的所有好处。你只是在使用驱动程序

解决这个问题有两个明智的选择:

  • 使用spark重做您的解决方案
  • 使用koalas,它的API大部分与pandas兼容

相关问题 更多 >