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

时间:2018-08-20 15:33:01

标签: python python-3.x pyspark databricks

我正在使用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云服务器保存到我的本地计算机上……有人知道如何修复该文件吗?

3 个答案:

答案 0 :(得分:0)

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

Option Explicit

Public Sub GoNext()
    Dim LastRow As Long

    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.Columns("E").NumberFormat = "$#,##0.00"

        If ws.Name <> "CPOA Report Macro" And ws.Name <> "Summary" Then
            LastRow = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row + 1
            ws.Range("E" & LastRow).Font.Bold = True
            ws.Range("E" & LastRow).Formula = "=SUM(E2:E" & LastRow - 1 & ")"
        End If
    Next ws
End Sub

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

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

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

Similar question on databricks forums

Databricks documentation

答案 1 :(得分:0)

因为要在Databricks笔记本中运行此文件,所以在使用Pandas将文件保存到test.csv时,该文件将保存到Databricks驱动程序节点的文件目录中。下面的代码段是一种测试方法:

AFVAJFLDVAJPQDVAJDSNJKVAJGHD

VAJ的位置位于Databricks群集驱动程序节点的[ "VAJFLDVAJPQDVAJDSNJKVAJGHD", "VAJPQDVAJDSNJKVAJGHD", "VAJDSNJKVAJGHD", "VAJGHD" ] 文件夹中。要验证这一点:

# 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')

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

答案 2 :(得分:0)

从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')