Какой лучший способ отправить фрейм данных на сервер sql?

Я очень новичок в Azure, мне нужно знать, как лучше всего передать фреймворк данных pandas размером около 10 ГБ на сервер sql и какие службы лучше обрабатывать 10-13 ГБ данных. В настоящее время я использую функцию Python Azure, где я делаю некоторые ETL, и, наконец, чистые данные размером 10 ГБ должны быть отправлены на сервер sql?

Меня смущают следующие моменты

  1. Лучше ли Azure Databricks, чем функция Azure, с точки зрения времени и стоимости для обработки данных объемом 10–15 ГБ?

  2. Для передачи данных, какой метод лучше: Отправка с python с помощью: df.to_sql('products', conn, if_exists='replace', index = False) или с использованием действия копирования ADF? -- Любые другие предложения приветствуются.

  3. Должен ли я выбрать PySpark вместо Python в блоке данных Azure, чтобы ускорить процесс?

Если вы используете Databricks, вам также следует использовать PySpark вместо pandas, поскольку PySpark использует для обработки узлы кластера, а pandas, насколько я знаю, этого не делает.

The-First-Tiger 31.01.2023 08:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упоминалось в некоторых комментариях, быстрее загружать данные в SQL с помощью Pyspark.

Код для загрузки кадра данных pyspark в SQL

from datetime import datetime
servername = "jdbc:sqlserver://mytestserver.database.windows.net:1433"
dbname = "mydbname"
url = servername + ";" + "databaseName = " + dbname + ";"
dbtable = "Mytable"
user = "xxxxxxx"
password = "xxxxxxxxxxxxx" # Please specify password here
 
def writeToSQL(df_raw):
# Adding an id column with unique values
    uuidUdf= udf(lambda : str(uuid.uuid4()),StringType())
    nowUdf= udf(lambda : int(time.time() * 1000),LongType())
    df_raw = df1 \
      .withColumn("id", uuidUdf()) \
      .withColumn("insertedAt", nowUdf()) \
 
    try:
        df_raw.write \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .mode("overwrite") \
        .option("url", url) \
        .option("dbtable", dbtable) \
        .option("user", user) \
        .option("password", password) \
        .save()
    except ValueError as error :
        print("Connector write failed", error)

df_raw=spark.createDataFrame(pandasDF)  #convert pandas to pyspark
starttime = datetime.utcnow()
print("Starting ingestion: ", datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f"))
writeToSQL(df_raw)
endtime = datetime.utcnow()
print("Finished ingestion: ", datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f"))
print("Time taken :" + str(endtime-starttime))

В этой строке df_raw=spark.createDataFrame(pandasDF) #convert pandas to pyspark... Вы конвертируете фрейм данных pandas в Pyspark, а затем отправляете данные в SQL. Мой вопрос: вы запустили все свои etl в Python и во время нажатия вы только что преобразовали pandas df в pyspark df?

Kalyan Rao 02.02.2023 05:00

Ну да. Фрейм данных Python не предлагает производительность, которую делает pyspark. Конечно, вы можете напрямую загрузить фрейм данных pandas (используя другой код), но это займет много времени. Чтобы загрузить данные в SQL с помощью pyspark, вам нужен фрейм данных pyspark. Вы сказали, что в настоящее время используете Python, но ваш вопрос заключался в том, что быстрее. Pyspark является здесь явным победителем с точки зрения производительности, и использование Python на блоках данных — пустая трата времени, когда Databricks предлагает искру. Если возможно, вам следует изменить текущий ETL на Pyspark.

Anupam Chand 02.02.2023 06:00

Другие вопросы по теме