Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Scala 如何在for循环中单独处理多个拼花地板文件?_Scala_Apache Spark - Fatal编程技术网

Scala 如何在for循环中单独处理多个拼花地板文件?

Scala 如何在for循环中单独处理多个拼花地板文件?,scala,apache-spark,Scala,Apache Spark,我有多个拼花文件(大约1000个)。我需要加载它们中的每一个,对其进行处理并将结果保存到配置单元表中。我有一个for循环,但它似乎只能处理2或5个文件,而不能处理1000个文件,因为Sparks似乎试图同时加载所有文件,我需要它在同一个Spark会话中单独执行 我尝试使用for循环,然后使用for-each,使用unpersist(),但还是失败了 val ids = get_files_IDs() ids.foreach(id => { println("Starting file "

我有多个拼花文件(大约1000个)。我需要加载它们中的每一个,对其进行处理并将结果保存到配置单元表中。我有一个for循环,但它似乎只能处理2或5个文件,而不能处理1000个文件,因为Sparks似乎试图同时加载所有文件,我需要它在同一个Spark会话中单独执行

我尝试使用for循环,然后使用for-each,使用unpersist(),但还是失败了

val ids = get_files_IDs()
ids.foreach(id => {
println("Starting file " + id)
var df = load_file(id)
var values_df = calculate_values(df)
values_df.write.mode(SaveMode.Overwrite).saveAsTable("table.values_" + id)
df.unpersist()
})

def get_files_IDs(): List[String] = {
var ids = sqlContext.sql("SELECT CAST(id AS varchar(10)) FROM  table.ids WHERE id IS NOT NULL")
var ids_list = ids.select("id").map(r => r.getString(0)).collect().toList
return ids_list
}

def calculate_values(df:org.apache.spark.sql.DataFrame): org.apache.spark.sql.DataFrame ={
val values_id = df.groupBy($"id", $"date", $"hr_time").agg(avg($"value_a") as "avg_val_a", avg($"value_b") as "avg_value_b")
return values_id
}

def load_file(id:String): org.apache.spark.sql.DataFrame = {
val df = sqlContext.read.parquet("/user/hive/wh/table.db/parquet/values_for_" + id + ".parquet")
return df
}
我所期望的是Spark加载文件ID 1,处理数据,将其保存到配置单元表,然后取消该日期并继续使用第二个ID,依此类推,直到完成1000个文件。而不是试图同时加载所有内容

任何帮助都将不胜感激!我已经坚持了好几天了。我在Scala上使用Spark 1.6谢谢


编辑:添加了定义。希望能有助于获得更好的视野。谢谢大家!

好的,所以经过大量检查后,我意识到这个过程运行良好。它单独处理每个文件并保存结果。问题是,在一些非常具体的情况下,这一进程正在走上漫长的道路


因此,我可以告诉您,使用for循环或for-each,您可以处理多个文件并毫无问题地保存结果。取消持久化和清除缓存确实有助于提高性能。

好的,所以经过大量检查后,我意识到该过程工作正常。它单独处理每个文件并保存结果。问题是,在一些非常具体的情况下,这一进程正在走上漫长的道路


因此,我可以告诉您,使用for循环或for-each,您可以处理多个文件并毫无问题地保存结果。取消持久化和清除缓存有助于提高性能。

ID的类型是什么?为什么要使用
var
取消
val
?同时尝试取消持久化
值\u df
。我不知道您的
load_file
calculate_value
中有什么逻辑,但您也可以在取消持久化数据帧后尝试执行
sparkSession.sqlContext.clearCache()。我已经添加了定义,这就是我正在使用的全部代码。我将测试@DmitryY的内容。建议。我使用var只是为了看看它是否有所不同,我从Beggining开始就使用val。非常感谢。
ids
的类型是什么?为什么要使用
var
而不是
val
?同时尝试取消持久化
值\u df
。我不知道您的
load_file
calculate_value
中有什么逻辑,但您也可以在取消持久化数据帧后尝试执行
sparkSession.sqlContext.clearCache()。我已经添加了定义,这就是我正在使用的全部代码。我将测试@DmitryY的内容。建议。我使用var只是为了看看它是否有所不同,我从Beggining开始就使用val。非常感谢。