Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RESTAPI(Scala)将数据摄取到数据库中_Scala_Rest_Databricks_Azure Databricks - Fatal编程技术网

使用RESTAPI(Scala)将数据摄取到数据库中

使用RESTAPI(Scala)将数据摄取到数据库中,scala,rest,databricks,azure-databricks,Scala,Rest,Databricks,Azure Databricks,我需要从databricks调用restapi,最好使用Scala来获取数据并在databricks中持久化。这是我第一次这样做,我需要帮助。你们中有谁能一步一步地告诉我如何做到这一点吗?。API团队已经创建了一个服务主体,并授予了对API的访问权。因此,需要通过SPN进行身份验证 谢谢 不建议使用RESTAPI将数据摄取到数据库中 原因:单个API调用上传的数据量不能超过1MB 要将大于1MB的文件上载到DBFS,请使用流式API,它是create、addBlock和close的组合 下面是一

我需要从databricks调用restapi,最好使用Scala来获取数据并在databricks中持久化。这是我第一次这样做,我需要帮助。你们中有谁能一步一步地告诉我如何做到这一点吗?。API团队已经创建了一个服务主体,并授予了对API的访问权。因此,需要通过SPN进行身份验证


谢谢

不建议使用RESTAPI将数据摄取到数据库中

原因:单个API调用上传的数据量不能超过1MB

要将大于1MB的文件上载到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})
导入json
导入base64
导入请求
域=“”
令牌=b''
基本URL='https://%s/api/2.0/dbfs/'%(域)
def dbfs_rpc(动作,主体):
“”“一个用于发出DBFS API请求的帮助函数,请求/响应被编码/解码为JSON”“”
response=requests.post(
基本URL+操作,
标头={“授权:承载%s”%TOKEN},
json=body
)
返回response.json()
#创建将用于添加块的句柄
handle=dbfs_-rpc(“创建”,{“路径”:“/temp/upload_-large_-file”,“覆盖”:“true”})[handle']
将open('/a/local/file')作为f:
尽管如此:
#一个数据块最多可以是1MB

block=f.read(1如果您想上传jar文件或非ascii文件而不是 dbfs_rpc(“添加块,{“句柄”:句柄,“数据”:数据}”) 使用 dbfs_rpc(“添加块”,“句柄”:句柄,“数据”:data.decode('UTF8')})


其他详细信息相同。

Hi Sujatha,如果我的答案对您有帮助,您可以将其作为答案接受(单击答案旁边的复选标记,将其从灰色变为填充)。这对其他社区成员可能会有所帮助。谢谢。