使用 RDD.foreach 创建 Dataframe 并在 Spark scala 中对 Dataframe 执行操作
Use RDD.foreach to Create a Dataframe and execute actions on the Dataframe in Spark scala
我正在尝试读取 spark read.textfile 中的配置文件,其中基本上包含我的 table 列表。我的任务是遍历 table 列表并将 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
Input DataSize: 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)}
)
我建议取消收集,因为它是一项操作,因此 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)})
回复:
will this execute in Executor or Driver?
调用 tableList.collect() 后,'tables.txt' 的内容将被带到驱动程序应用程序。如果它在驱动程序内存中,它应该没问题。
然而,Dataframe 上的保存操作将在执行器上执行。
回复:
This will throw Out of Memory Error ?
你遇到过吗? IMO,除非您的 tables.txt 太大,否则您应该 alright.I 我假设输入数据大小为 45 GB 是 tables.txt.
中提到的表中的数据
希望对您有所帮助。
我正在尝试读取 spark read.textfile 中的配置文件,其中基本上包含我的 table 列表。我的任务是遍历 table 列表并将 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
Input DataSize: 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)}
)
我建议取消收集,因为它是一项操作,因此 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)})
回复:
will this execute in Executor or Driver?
调用 tableList.collect() 后,'tables.txt' 的内容将被带到驱动程序应用程序。如果它在驱动程序内存中,它应该没问题。 然而,Dataframe 上的保存操作将在执行器上执行。
回复:
This will throw Out of Memory Error ?
你遇到过吗? IMO,除非您的 tables.txt 太大,否则您应该 alright.I 我假设输入数据大小为 45 GB 是 tables.txt.
中提到的表中的数据希望对您有所帮助。