Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
使用python数据块在azure数据工厂中转换数据_Python_Azure_Azure Data Factory 2 - Fatal编程技术网

使用python数据块在azure数据工厂中转换数据

使用python数据块在azure数据工厂中转换数据,python,azure,azure-data-factory-2,Python,Azure,Azure Data Factory 2,我的任务是将数百万个JSON文件转换并整合为大型CSV文件 使用复制活动和映射模式的操作将非常简单,我已经测试过了,问题是大量文件的JSON格式不好 我知道错误是什么,修复也很简单,我想我可以使用Python数据块活动来修复字符串,然后将输出传递给复制活动,复制活动可以将记录合并到一个大的CSV文件中 我有这样的想法,我不确定这是否是解决这项任务的正确方法。我不知道在数据块活动中使用复制活动的输出 将JSON文件复制到存储中,例如BLOB,您可以从DataRicks访问存储。然后,您可以使用Py

我的任务是将数百万个JSON文件转换并整合为大型CSV文件

使用复制活动和映射模式的操作将非常简单,我已经测试过了,问题是大量文件的JSON格式不好

我知道错误是什么,修复也很简单,我想我可以使用Python数据块活动来修复字符串,然后将输出传递给复制活动,复制活动可以将记录合并到一个大的CSV文件中

我有这样的想法,我不确定这是否是解决这项任务的正确方法。我不知道在数据块活动中使用复制活动的输出

将JSON文件复制到存储中,例如BLOB,您可以从DataRicks访问存储。然后,您可以使用Python修复该文件,甚至可以在集群运行时转换为所需的格式


因此,在复制数据活动中,如果您还没有将文件复制到BLOB,请将其复制到BLOB。

听起来您想使用Azure Data Factory转换大量单个JSON文件,但正如@KamilNowinski所说,Azure现在不支持此功能。然而,既然您使用了Azure Databricks,那么编写一个简单的Python脚本来完成同样的事情对您来说就更容易了。因此,一个有效的解决方案是直接使用Azure存储SDK和Python包,通过在Azure Databricks上执行几个步骤来实现这一点

可能这些JSON文件都在Azure Blob存储的容器中,因此您需要通过在容器中列出它们,并使用sas token for pandas函数生成它们的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))
即使您想将它们合并到一个大的CSV文件中,您也可以首先通过类似append中列出的函数将它们合并到一个大的数据帧中

要将数据帧写入csv文件,我认为从功能上讲非常简单。或者,您可以在Azure DataRicks上将pandas数据帧转换为PySpark数据帧,如下代码所示

from pyspark.sql import SQLContext
from pyspark import SparkContext

sc = SparkContext()
sqlContest = SQLContext(sc)
spark_df = sqlContest.createDataFrame(df)
所以接下来,无论你想做什么,都很简单。如果您想在Azure Databricks中将脚本安排为笔记本,您可以参考官方文档来运行Spark作业


希望有帮助。

谢谢!这很有帮助,我不能用Pandas直接读取JSON文件,因为很多文件都有错误,事实上,我已经有了一个Python脚本,可以从blob中读取文件。如果需要,可以修复它们,创建一个CSV流并将其放回另一个blob容器,我在本地运行它,现在我将尝试使用Databricks,这些文件可能相当大,我已经计算出每天有115k条记录的日志,还有几个月的处理时间,我不知道这是否会导致内存问题
from pyspark.sql import SQLContext
from pyspark import SparkContext

sc = SparkContext()
sqlContest = SQLContext(sc)
spark_df = sqlContest.createDataFrame(df)