Я использую записную книжку 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 на мою локальную машину ... Кто-нибудь знает, как это исправить?

1
LaLaTi 20 Авг 2018 в 18:33

3 ответа

Лучший ответ

Выберите из 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')
0
ryguy72 22 Авг 2018 в 20:34

Поскольку вы выполняете это в записной книжке Databricks, когда вы используете Pandas для сохранения вашего файла в test.csv, он сохраняется в каталоге файлов узла драйвера Databricks. Способ проверить это - следующий фрагмент кода:

# 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/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), вы можете просмотреть Spark DataFrame с помощью команды display в блокноте Databricks. Отсюда вы можете нажать на кнопку «Загрузить в CSV», которая выделена красным на изображении ниже. Показать фрейм данных с выделенной кнопкой Загрузить CSV

0
Denny Lee 21 Авг 2018 в 07:45

Поскольку вы используете Databricks, вы, скорее всего, работаете на удаленной машине. Как уже упоминалось, сохранение того, как вы работаете, не будет работать (файл будет сохранен на машине, на которой находится главный узел вашего ноутбука). Попробуйте запустить:

import os

os.listdir(os.getcwd())

Это перечислит все файлы, которые находятся в каталоге, из которого работает ноутбук (по крайней мере, так работает ноутбук jupyter). Вы должны увидеть сохраненный файл здесь.

Тем не менее, я думаю, что Databricks предоставляет своим клиентам служебные функции для простой загрузки данных из облака. Кроме того, попробуйте использовать spark для подключения к БД - это может быть немного удобнее.

Я думаю, что эти две ссылки должны быть полезны для вас:

Подобный вопрос на форумах databricks

Документация по БД

0
Vaidas Armonas 20 Авг 2018 в 16:27
51934098