Ввод данных в блоки данных с использованием Rest API (Scala) - PullRequest
0 голосов
/ 05 февраля 2020

Мне нужно вызвать API отдыха из блоков данных, предпочтительно используя Scala, чтобы получить данные и сохранить их в кирпичах данных. Это первый раз, когда я делаю это, и мне нужна помощь. Может кто-нибудь из вас, пожалуйста, проведите меня шаг за шагом относительно того, как этого добиться? Команда API уже создала субъект-службу и предоставила доступ к API. Таким образом, аутентификация должна быть сделана через SPN.

Спасибо!

1 Ответ

0 голосов
/ 06 февраля 2020

REST API не рекомендуется использовать для встраивания данных в блоки данных.

Причина: Объем данных, загруженных за один вызов API, не может превышать 1 МБ.

Чтобы загрузить файл размером более 1 МБ в DBFS, используйте API потоковой передачи, который представляет собой комбинацию create, addBlock и close.

Вот пример того, как выполнить это действие с использованием Python.

import json
import base64
import requests

DOMAIN = '<databricks-instance>'
TOKEN = b'<your-token>'
BASE_URL = 'https://%s/api/2.0/dbfs/' % (DOMAIN)

def dbfs_rpc(action, body):
  """ A helper function to make the DBFS API request, request/response is encoded/decoded as JSON """
  response = requests.post(
    BASE_URL + action,
    headers={"Authorization: Bearer %s" % TOKEN },
    json=body
  )
  return response.json()

# Create a handle that will be used to add blocks
handle = dbfs_rpc("create", {"path": "/temp/upload_large_file", "overwrite": "true"})['handle']
with open('/a/local/file') as f:
  while True:
    # A block can be at most 1MB
    block = f.read(1 << 20)
    if not block:
        break
    data = base64.standard_b64encode(block)
    dbfs_rpc("add-block", {"handle": handle, "data": data})
# close the handle to finish uploading
dbfs_rpc("close", {"handle": handle})

Подробнее см. " DBFS API "

Надеюсь, это поможет.

...