无法将数据框保存到本地 Mac 机器

Posted

技术标签:

【中文标题】无法将数据框保存到本地 Mac 机器【英文标题】:Can't Save Dataframe to Local Mac Machine 【发布时间】:2018-08-20 15:33:00 【问题描述】:

我正在使用 Databricks 笔记本并在查询后尝试将我的数据框以 CSV 格式导出到我的本地计算机。但是,它不会将我的 CSV 保存到我的本地计算机。为什么?

连接到数据库

#SQL Connector
import pandas as pd
import psycopg2
import numpy as np
from pyspark.sql import *

#Connection
cnx = psycopg2.connect(dbname= 'test', host='test', port= '1234', user= 'test', password= 'test')
cursor = cnx.cursor()

SQL 查询

query = """
SELECT * from products;  
"""

# Execute the query
try:
  cursor.execute(query)
except OperationalError as msg: 
  print ("Command skipped: ")

#Fetch all rows from the result
rows = cursor.fetchall()

# Convert into a Pandas Dataframe
df = pd.DataFrame( [[ij for ij in i] for i in rows] )

将数据以 CSV 格式导出到本地机器

df.to_csv('test.csv')

它没有给出任何错误,但是当我转到我的 Mac 机器的搜索图标以查找“test.csv”时,它不存在。我认为该操作不起作用,因此该文件从未从 Databricks 云服务器保存到我的本地计算机...有人知道如何修复它吗?

【问题讨论】:

您似乎在远程机器上运行所有这些 - 如果是这样,该文件也保存在该远程机器上。不会有任何(简单的)python 代码将数据导出到本地机器。最简单的方法可能是使用一些文件传输工具。 在 Databricks 中,文件去了哪里?也许我可以从那里手动抓取它。请指教。 你应该从这段代码所在的目录开始检查(更准确地说是工作目录)。 当我运行 os.system('pwd') 时,它给了我 Out:0。所以,它不起作用...... @paul 当我执行此命令时,没有输出。 【参考方案1】:

从 SQL Server 中选择:

import pypyodbc 
cnxn = pypyodbc.connect("Driver=SQL Server Native Client 11.0;"
                        "Server=Server_Name;"
                        "Database=TestDB;"
                        "Trusted_Connection=yes;")

#cursor = cnxn.cursor()
#cursor.execute("select * from Actions")
cursor = cnxn.cursor()
cursor.execute('SELECT * FROM Actions')

for row in cursor:
    print('row = %r' % (row,))

从 SQL Server 到 Excel:

import pyodbc
import pandas as pd

# cnxn = pyodbc.connect("Driver=SQL Server;SERVER=xxx;Database=xxx;UID=xxx;PWD=xxx")
cnxn = pyodbc.connect("Driver=SQL Server;SERVER=EXCEL-PC\SQLEXPRESS;Database=NORTHWND;")
data = pd.read_sql('SELECT * FROM Orders',cnxn)

data.to_excel('C:\\your_path_here\\foo.xlsx')

【讨论】:

【参考方案2】:

由于您使用的是 Databricks,因此您很可能在远程计算机上工作。就像已经提到的那样,保存您不会工作的方式(文件将保存到您的笔记本主节点所在的机器上)。尝试运行:

import os

os.listdir(os.getcwd())

这将列出运行笔记本的目录中的所有文件(至少它是 jupyter 笔记本的工作方式)。您应该会在此处看到保存的文件。

但是,我认为 Databricks 为他们的客户提供了一个实用程序功能,以便从云中轻松下载数据。另外,尝试使用 spark 连接到 db - 可能会更方便一些。

我认为这两个链接应该对你有用:

Similar question on databricks forums

Databricks documentation

【讨论】:

在 Databricks 中,文件去了哪里?也许我可以从那里手动抓取它。请指教。 如果该文件未保存在我的个人工作空间中,我如何在远程服务器上找到该文件,或者如何直接将该文件保存在我的工作空间中?【参考方案3】:

因为您是在 Databricks 笔记本中运行它,所以当您使用 Pandas 将文件保存到 test.csv 时,它会保存到 Databricks 驱动程序节点的文件目录中。一种测试方法是使用以下代码 sn-p:

# Within Databricks, there are sample files ready to use within 
# the /databricks-datasets folder    
df = spark.read.csv("/databricks-datasets/samples/population-vs-price/data_geo.csv", inferSchema=True, header=True)

# Converting the Spark DataFrame to a Pandas DataFrame
import pandas as pd
pdDF = df.toPandas()

# Save the Pandas DataFrame to disk
pdDF.to_csv('test.csv')

test.csv 的位置位于 Databricks 集群驱动程序节点的 /databricks/driver/ 文件夹中。要验证这一点:

# Run the following shell command to see the results
%sh cat test.csv

# The output directory is shown here
%sh pwd

# Output
# /databricks/driver

要将文件保存到本地计算机(即 Mac),您可以在 Databricks 笔记本中使用 display 命令查看 Spark DataFrame。从这里,您可以单击下图中以红色突出显示的“下载到 CSV”按钮。

【讨论】:

以上是关于无法将数据框保存到本地 Mac 机器的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 如何将 Parquet 数据帧保存到本地磁盘?

将数据框保存到本地文件系统会导致空结果

无法将数据框保存到镶木地板 pyspark

在 Databricks PySpark 中本地保存文件

无法将数据保存到 React 中的本地存储

Mac电脑如何保存整个网页到本地?