将数据从多个CSV文件复制到一个CSV文件中



我在Azure Blob存储中有多个CSV文件,我希望将其附加到一个CSV文件中,也将使用Azure Data Factory Pipeline存储在Azure Blob存储中。问题在于,源文件的所有列都不存在于接收器文件中,反之亦然,所有源文件也不相同。我只想映射从源文件到接收器文件中的列所需的列。数据工厂中的复制活动不允许我这样做。

正如@leonyue所说,它现在不支持Azure Data Factory。但是,根据我的经验,作为解决方法解决方案,您可以考虑使用pandas创建一个Python脚本来执行此操作,并作为Azure App Service的WebJob或在Azure VM上运行,以加速Azure Storage和其他Azure Services之间。

解决方案的步骤如下。

  1. 也许这些CSV文件都在Azure Blob存储的容器中,因此您需要通过list_blob_names在容器中列出它们,并使用pandas read_csv函数的SAS令牌生成其URL,代码如下。

    from azure.storage.blob.baseblobservice import BaseBlobService
    from azure.storage.blob import ContainerPermissions
    from datetime import datetime, timedelta
    account_name = '<your account name>'
    account_key = '<your account key>'
    container_name = '<your container name>'
    service = BaseBlobService(account_name=account_name, account_key=account_key)
    token = service.generate_container_shared_access_signature(container_name, permission=ContainerPermissions.READ, expiry=datetime.utcnow() + timedelta(hours=1),)
    blob_names = service.list_blob_names(container_name)
    blob_urls_with_token = (f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{token}" for blob_name in blob_names)
    #print(list(blob_urls_with_token))
    
  2. 通过read_csv函数直接读取CSV文件以获取Pandas DataFrame。

    import pandas as pd
    for blob_url_with_token in blob_urls_with_token:
        df = pd.read_csv(blob_url_with_token)
    
  3. 您可以按照您的脑袋操作这些数据框,然后通过使用python使用Azure Storage SDK来写入Azure Blob存储作为单个CSV文件。

希望它有帮助。

根据我的经验,如果您的CSV文件与接收器文件没有相同的格式或列,则无法合并或附加到一个CSV文件。在映射步骤中,我们无法导入模式并映射您需要的列。

Azure数据工厂不支持这样做。

相关内容

  • 没有找到相关文章

最新更新