Apache spark 迭代多个文件夹中的多个文件,如果名称与条件匹配,则将所有文件加载到DF中

Apache spark 迭代多个文件夹中的多个文件,如果名称与条件匹配,则将所有文件加载到DF中,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我试图在数据湖中的多个文件夹中循环浏览多个文件。我有两个想法,如下所示 // first attempt import org.apache.spark.sql.functions.input_file_name val myDFCsv = spark.read.format("csv") .option("sep","|") .option("inferSchema","true") .option("header","false") .load("mnt/rawdat

我试图在数据湖中的多个文件夹中循环浏览多个文件。我有两个想法,如下所示

// first attempt
import org.apache.spark.sql.functions.input_file_name
val myDFCsv = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/corp/CW*.gz")
   .withColumn("file_name", input_file_name())

myDFCsv.count()

// second attempt
import org.apache.spark.sql.functions.input_file_name

val myDFCsv = spark.read
   .option("sep", "|")
   .option("inferSchema", "true")
   .option("header", "false")
   .csv("mnt/rawdata/corp/CW*.gz")
   .withColumn("file_name", input_file_name())

myDFCsv.count()
在这两种情况下,我都得到了这个错误

myDFCsv:org.apache.spark.sql.DataFrame = [_c0: string, _c1: string ... 3 more fields]
import org.apache.spark.sql.functions.input_file_name
myDFCsv: org.apache.spark.sql.DataFrame = [_c0: string, _c1: string ... 3 more fields]
res11: Long = 97

这肯定是非常接近的工作,但似乎有什么是关闭的,我不知道它是什么。有人能指出问题并告诉我这里出了什么问题吗?非常感谢。

这里没有问题,这不是错误,输出告诉您:

  • 有一个名为:myDFCsv的数据框架,包含5个字段
  • 导入了org.apache.spark.sql.functions.input\u文件名吗
  • 有一个名为myDFCsv的数据框,包含5个字段
  • 计算数据帧中的行数,结果得到97行
  • 您可以开始使用dataframe并使用以下命令查看其内容:
    myDFCsv.show(false)

    还可以使用以下操作检查数据帧的架构:
    myDFCsv.printSchema()


    我希望这会有帮助,

    哦,我明白了。好的,我对这个还不熟悉。谢谢你的确认。还有一个问题……这是最佳实践吗?或者,也许有更好的方法来做这类事情。我读了一些关于Sqoop的文章。这似乎是一个可行的选择。我测试了一辆coupe Sqoop的想法,但没有任何效果。挑战在于将数百个文件合并在一起,添加与每个文件相关的文件名,并将其全部加载到SQL Server表中。这里有几个活动部件。