【问题标题】:How to parse the complete set of records for a dataset through an API call?如何通过 API 调用解析数据集的完整记录集?
【发布时间】:2021-04-16 22:30:17
【问题描述】:

如何通过 Foundry API 调用获取完整的数据集记录? 我想在 Foundry 之外的另一个 Python 应用程序中使用该数据集,并使用 requests 只有前 300 行记录即将到来。 我拥有的requests API 端点正在使用 Contour dataset-preview

【问题讨论】:

  • 您能否更好地描述您正在尝试做的事情?您是在尝试将数据从 Foundry 导出到另一个应用程序,还是尝试下载数据集?如果数据集是 100gb 的数据,您打算全部下载吗?
  • 它只有 100k 条记录,我想将整个数据解析到另一个应用程序中。我打算使用 python 请求将数据解析为 pandas 数据框,以便在我的应用程序中使用
  • @Asher 虽然可以做到这一点,但你不能在铸造厂做任何你需要的改造吗?这就是首先使用它的意义所在。它支持将数据加载到 pandas 数据框、加载任意 python 库、绘图等,因此您需要做的事情似乎很可能无需下载任何数据。下载数据的缺点是,您得出的任何结果都与代工厂中可见的出处/因果链脱节,不会自动更新,并且可能存在法律/合规问题(如 GDPR 删除)
  • @JonathanRingstad,感谢您提供宝贵的见解,其中一个主要原因是代工厂受 IP 地址限制,因此如果您有将铸造数据访问到可视化(如移动设备上的 power bi)的更好解决方案,请与我们分享。
  • @Asher 要重新分区,您可以从模板(仅在 df 上调用 identity 的模板)创建空 python 转换,然后将函数填写为类似 return df.repartition(10) (把它变成10个文件)。您可能不希望将其变成如此少的文件,以至于每个文件最终都达到数 GB。我不知道 palantir 目前是否可以为您的组织提供代工移动,我认为它仍然是 beta 版,有选择性地推出或类似的(我不太了解)

标签: python palantir-foundry foundry-data-connection foundry-contour


【解决方案1】:

在 Foundry 中查询数据集有不同的可能性,具体取决于数据集大小和用例。 可能最容易上手的是数据代理查询 sql,因为您不必担心数据集的底层文件格式。

import requests
import pandas as pd

def query_foundry_sql(query, token, branch='master', base_url='https://foundry-instance.com') -> (list, list):
    """
    Queries the dataproxy query API with spark SQL.
    Example: query_foundry_sql("SELECT * FROM `/path/to/dataset` Limit 5000", "ey...")
    Args:
        query: the sql query
        branch: the branch of the dataset / query

    Returns: (columns, data) tuple. data contains the data matrix, columns the list of columns
    Can be converted to a pandas Dataframe:
    pd.DataFrame(data, columns)

    """
    response = requests.post(f"{base_url}/foundry-data-proxy/api/dataproxy/queryWithFallbacks",
                             headers={'Authorization': f'Bearer {token}'},
                             params={'fallbackBranchIds': [branch]},
                             json={'query': query})

    response.raise_for_status()
    json = response.json()
    columns = [e['name'] for e in json['foundrySchema']['fieldSchemaList']]
    return columns, json['rows']

columns, data = query_foundry_sql("SELECT * FROM `/Global/Foundry Operations/Foundry Support/iris` Limit 5000", 
                                  "ey...",
                                 base_url="https://foundry-instance.com")
df = pd.DataFrame(data=data, columns=columns)
df.head(5)

【讨论】:

  • 谢谢你,这正好涵盖了我正在寻找的内容 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多