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

时间:2019-06-26 07:44:14

标签: azure azure-storage-blobs azure-data-factory azure-blob-storage

我的azure blob存储中有多个csv文件,希望将它们附加到一个使用azure数据工厂管道存储在azure blob存储中的csv文件中。问题在于,源文件中的所有列都不存在于接收器文件中,反之亦然,并且所有源文件也不相同。我只想将我需要的列从源文件映射到接收器文件中的列。数据工厂中的复制活动不允许我这样做。

2 个答案:

答案 0 :(得分:0)

根据我的经验,如果您的csv文件与接收器文件的格式或列不同,则无法合并或追加到一个csv文件。在“映射”步骤中,我们无法导入架构并映射所需的列。

Azure Data Factory不支持这样做。

答案 1 :(得分:0)

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

解决方法的步骤如下。

  1. 也许这些csv文件都在Azure Blob存储的容器中,所以您需要通过list_blob_names在容器中列出它们,并使用sas令牌为熊猫read_csv函数生成其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文件以获取熊猫数据框。

    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存储SDK将其作为单个csv文件写入Azure Blob存储。

希望有帮助。