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
Hadoop 如何允许spark忽略丢失的输入文件?_Hadoop_Apache Spark - Fatal编程技术网

Hadoop 如何允许spark忽略丢失的输入文件?

Hadoop 如何允许spark忽略丢失的输入文件?,hadoop,apache-spark,Hadoop,Apache Spark,我想在一些生成的包含avro文件的S3路径上运行spark作业(spark v1.5.1)。我正在加载以下内容: val avros = paths.map(p => sqlContext.read.avro(p)) 但是,某些路径将不存在。我如何让spark忽略这些空路径?以前我使用过,但我不确定如何在新的DataFrameAPI中使用它 注意:理想情况下,我正在寻找一种类似于链接答案的方法,这种方法只是使输入路径成为可选的。我并不特别想明确检查S3中是否存在路径(因为这很麻烦,可能会

我想在一些生成的包含avro文件的S3路径上运行spark作业(spark v1.5.1)。我正在加载以下内容:

val avros = paths.map(p => sqlContext.read.avro(p))
但是,某些路径将不存在。我如何让spark忽略这些空路径?以前我使用过,但我不确定如何在新的DataFrameAPI中使用它


注意:理想情况下,我正在寻找一种类似于链接答案的方法,这种方法只是使输入路径成为可选的。我并不特别想明确检查S3中是否存在路径(因为这很麻烦,可能会使开发变得笨拙),但是如果现在没有干净的方法来实现这一点,我想这是我的退路。

我会使用scala
Try
类型来处理读取avro文件目录时失败的可能性。通过“Try”,我们可以在代码中明确失败的可能性,并以功能性的方式进行处理:

objectmain扩展应用程序{
导入scala.util.{Success,Try}
导入org.apache.spark.{SparkConf,SparkContext}
导入com.databricks.spark.avro_
val sc=new SparkContext(new SparkConf().setMaster(“local[*]”)。setAppName(“示例”))
val sqlContext=new org.apache.spark.sql.sqlContext(sc)
//第一条路径存在,第二条路径不存在
val路径=列表(“/data/1”,“/data/2”)
//在Try中包装读取路径的尝试,然后使用collect进行筛选
//并用一个局部函数映射。
瓦尔·阿夫罗斯=
路径
.map(p=>Try(sqlContext.read.avro(p)))
.收集{
案例成功(df)=>df
}
//对数据帧列表执行任何操作
avros.foreach{df=>
println(df.collect())
}
sc.停止()
}

来自spark文档:
collect()
会导致驱动程序内存不足,因为
collect()
会将整个RDD提取到一台机器上。有没有不使用
collect()
的解决方案?这适用于非常大的数据集。在RDD上调用
collect()
时就是这样。我第一次调用collect(…)时,它包含一个分部函数,它位于RDD列表中,它是列表中的collect函数,而不是任何RDD上的。这相当于执行
映射
过滤器
。我确实在末尾使用了
collect()
,在
foreach
中,但这只是操作RDD列表的一个示例,我不希望您在自己的应用程序中会这样做,但我需要一个简单的结尾来查看该方法是否正确工作。哦,好的。我会试试看它是否管用。我认为第一次收集是评估RDD并将所有数据发送到驱动程序节点。这是一个非常完美的答案,绝对值得赏金