我正在尝试在spark read.textfile中读取一个配置文件,该文件基本上包含我的表列表。我的任务是遍历表列表并将Avro转换为ORC格式。请在下面的代码段中找到符合逻辑的代码。
val tableList = spark.read.textFile('tables.txt')
tableList.collect().foreach(tblName => {
val df = spark.read.format("avro").load(inputPath+ "/" + tblName)
df.write.format("orc").mode("overwrite").save(outputPath+"/"+tblName)})
请在下面找到我的配置
DriverMemory:4GB
ExecutorMemory:10GB
NoOfExecutors:5
输入数据大小:45GB
我的问题是,这将在执行程序或驱动程序中执行吗?这会抛出内存不足错误吗?请评论您的建议。
val tableList = spark.read.textFile('tables.txt')
tableList.collect().foreach(tblName => {
val df = spark.read.format("avro").load(inputPath+ "/" + tblName)
df.write.format("orc").mode("overwrite").save(outputPath+"/"+tblName)}
)
答案 0 :(得分:0)
我建议取消收集,因为这是一项操作,因此来自45gb文件的所有数据都已加载到内存中。您可以尝试类似
val tableList = spark.read.textFile('tables.txt')
tableList.foreach(tblName => {
val df = spark.read.format("avro").load(inputPath+ "/" + tblName)
df.write.format("orc").mode("overwrite").save(outputPath+"/"+tblName)})
答案 1 :(得分:0)
回复:
这将在执行程序或驱动程序中执行吗?
一旦调用tableList.collect(),“ tables.txt”的内容将被带到驱动程序应用程序。如果它位于驱动程序内存中,应该没问题。 但是,对Dataframe的保存操作将在执行程序上执行。
回复:
这会抛出内存不足错误吗?
你面对过一个吗? IMO,除非您的表.txt太大,否则应该没问题。我假设输入数据大小为45 GB是表.txt中提到的表中的数据。
希望这会有所帮助。