Scala 如何将一组输入文件(而不是目录)传递给spark作业,并在这些文件上创建数据帧

Scala 如何将一组输入文件(而不是目录)传递给spark作业,并在这些文件上创建数据帧,scala,dataframe,apache-spark,Scala,Dataframe,Apache Spark,我想将一组avro文件作为输入传递给spark job,并在这些文件上创建dataframe。(我不想将文件放在目录中,并将目录作为输入传递) 在Spark shell中,我能够像下面这样成功地创建数据帧 val DF = hiveContext.read.format("com.databricks.spark.avro").load("/data/year=2019/month=09/day=28/hour=01/data_1.1569650402704.avro","/data/year=

我想将一组avro文件作为输入传递给spark job,并在这些文件上创建dataframe。(我不想将文件放在目录中,并将目录作为输入传递)

在Spark shell中,我能够像下面这样成功地创建数据帧

val DF = hiveContext.read.format("com.databricks.spark.avro").load("/data/year=2019/month=09/day=28/hour=01/data_1.1569650402704.avro","/data/year=2019/month=09/day=28/hour=01/data_2.1569650402353.avro")
但当我尝试运行spark submit命令时,同样失败

为了将avro文件独立地传递给spark作业,我尝试将avro文件放在文本文件中,并将此文件作为输入参数传递给驱动程序类

文本文件:

/data/year=2019/month=09/day=28/hour=01/data_1.1569650402704.avro
/data/year=2019/month=09/day=28/hour=01/data_2.1569650402353.avro

spark-submit --class Spark_submit_test --master yarn Spark_submit_test.jar textFile 
=>这张照片

fileList : /data/ASDS/PNR/archive/year=2019/month=09/day=28/hour=01/data_1.1569650402704.avro,/data/ASDS/PNR/archive/year=2019/month=09/day=28/hour=01/data_2.1569650402353.avro
获取以下异常:

Exception in thread "main" java.io.FileNotFoundException: File hdfs://bdaolc01-ns/data/ASDS/PNR/archive/year=2019/month=09/day=28/hour=01/data_1.1569650402704.avro,/data/ASDS/PNR/archive/year=2019/month=09/day=28/hour=01/data_2.1569650402353.avro does not exist.
不知道如何避免“
hdfs://bdaolc01-ns
“在开头追加。 如果我做错了,请纠正我,或者建议更好的方法来做同样的事情

注意:我尝试用双引号括起文件名,但没有用

预期结果:
Dataframe应该成功创建,df.printSchema应该列出avro文件的正确模式。

您需要splat操作符

myList:_*


使用
--files
选项将输入文件路径传递给spark submit命令。
还将输入文件名作为命令行参数传递。
这样我就可以在Drive类中读取文件

val avrofiles = Source.fromFile(inputFileName).getLines.toArray
并创建一个数据帧

val dF = hiveContext.read.format("com.databricks.spark.avro").load(avrofiles:_*)

嗨,安德鲁,谢谢你的回复。这个解决方案可能适用于spark 2,也适用于拼花地板。不幸的是,我们仍然使用spark 1.6。请您推荐任何解决方案w.r.t spark 1.6不幸的是,DataFrameReader上只有少数函数是varyargs
scala> val data = spark.read.parquet(paths: _*)
data: org.apache.spark.sql.DataFrame = [id: bigint, a: int ... 1 more field]    

scala> val paths = List("/tmp/example-parquet/part-00000-38cd8823-bff7-46f0-82a0-13d1d00ecce5-c000.snappy.parquet")
paths: List[String] = List(/tmp/example-parquet/part-00000-38cd8823-bff7-46f0-82a0-13d1d00ecce5-c000.snappy.parquet)

scala> val data = spark.read.parquet(paths: _*)
data: org.apache.spark.sql.DataFrame = [id: bigint, a: int ... 1 more field]

scala> data.count
res0: Long = 12500000
val avrofiles = Source.fromFile(inputFileName).getLines.toArray
val dF = hiveContext.read.format("com.databricks.spark.avro").load(avrofiles:_*)