使用Scala/pysprak从Zip文件中读取内容,也可以从数据磁盘和存储在ADL上的文件中读取内容
我有一个1.3GB的Zip文件,里面有一个6GB的以逗号分隔格式的txt文件。此zip文件夹位于Azure Data Lake存储上,并使用服务原则,将其装载在DBFS Dataricks文件系统上。 当使用普通python代码提取6GB文件时,我将1.98GB作为提取文件 请建议一种直接读取txt文件并将其存储为spark Dataframe的方法 我曾经尝试过使用python代码,但直接从python中读取会产生错误-使用Scala/pysprak从Zip文件中读取内容,也可以从数据磁盘和存储在ADL上的文件中读取内容,scala,zip,azure-data-lake,azure-databricks,pyspark-dataframes,Scala,Zip,Azure Data Lake,Azure Databricks,Pyspark Dataframes,我有一个1.3GB的Zip文件,里面有一个6GB的以逗号分隔格式的txt文件。此zip文件夹位于Azure Data Lake存储上,并使用服务原则,将其装载在DBFS Dataricks文件系统上。 当使用普通python代码提取6GB文件时,我将1.98GB作为提取文件 请建议一种直接读取txt文件并将其存储为spark Dataframe的方法 我曾经尝试过使用python代码,但直接从python中读取会产生错误-错误标记化数据。C错误:第371行预期有2个字段,saw 3 使用UTF-
错误标记化数据。C错误:第371行预期有2个字段,saw 3
使用UTF-16-LE
编码也解决了这一问题,但之后出现错误-ConnectException:Databricks上的连接被拒绝(连接被拒绝),同时尝试显示df.head()。
提取代码-
import pandas as pd
import zipfile
zfolder = zipfile.ZipFile('/dbfszippath')
zfolder.extract(dbfsexrtactpath)
当直接读取zip文件夹时,dataframe应该包含所有数据,并且应该显示一些数据,并且不应该挂起DataRicks集群。需要Scala或Pyspark中的选项。拒绝的连接来自Databricks和spark的内存设置。您必须增加尺寸公差以避免此错误
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql import SQLContext
conf=SparkConf()
conf.set("spark.executor.memory", "4g")
conf.set("spark.driver.memory", "4g")
在这种情况下,分配的内存是4GB,因此根据需要进行更改
另一个解决办法是:
import zipfile
import io
def zip_extract(x):
in_memory_data = io.BytesIO(x[1])
file_obj = zipfile.ZipFile(in_memory_data, "r")
files = [i for i in file_obj.namelist()]
return dict(zip(files, [file_obj.open(file).read() for file in files]))
zips = sc.binaryFiles("somerandom.zip")
files_data = zips.map(zip_extract)
让我知道这是否有效,或者这种情况下的错误是什么
拒绝的连接来自Databricks和spark的内存设置。您必须增加尺寸公差以避免此错误
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql import SQLContext
conf=SparkConf()
conf.set("spark.executor.memory", "4g")
conf.set("spark.driver.memory", "4g")
在这种情况下,分配的内存是4GB,因此根据需要进行更改
另一个解决办法是:
import zipfile
import io
def zip_extract(x):
in_memory_data = io.BytesIO(x[1])
file_obj = zipfile.ZipFile(in_memory_data, "r")
files = [i for i in file_obj.namelist()]
return dict(zip(files, [file_obj.open(file).read() for file in files]))
zips = sc.binaryFiles("somerandom.zip")
files_data = zips.map(zip_extract)
让我知道这是否有效,或者这种情况下的错误是什么
仍然存在错误-Overflower错误:无法序列化大于4 Gib的bytes对象。我回答的最后一句是“根据需要更改”,因此请将其更改为文件内存上方的内容。好的,为什么要将其读入pandas数据帧而不是spark数据帧?你试过使用吗?我还用另一种可能的解决方案更新了我的初始帖子。仍然出现错误-OverflowerError:无法序列化大于4 Gib的bytes对象我回答的最后一句话是“根据需要更改”因此,将其更改为文件内存之上的内容。好的,为什么要将其读入pandas数据帧而不是spark数据帧?你试过使用吗?我还用另一种可能的解决方案更新了我最初的帖子。