首页 > 解决方案 > 将多个文件合并到一个数据框中并推送到 Azure SQL Server

问题描述

在过去的几天里,我对此进行了一些研究,我认为我已经接近完成这项工作,但仍有一些问题我无法弄清楚。

我相信这应该在 Scala 环境中工作

// Spark 2.0
// these lines are equivalent in Spark 2.0
spark.read.format("csv").option("header", "false").load("../Downloads/*.csv")
spark.read.option("header", "false").csv("../Downloads/*.csv")

这给了我这个错误:org.apache.spark.sql.AnalysisException: Path does not exist:

我认为这应该在 SQL 环境中工作:

df = sqlContext.read
       .format("com.databricks.spark.csv")
       .option("header", "false")
       .load("../Downloads/*.csv") // <-- note the star (*)
df.show()

这给了我一个解析异常错误。

问题是,这些都是.gz压缩文本文件,所有这些文件中实际上都没有模式。嗯,有一个字段名称的垂直列表,真正的数据集总是从第 26、52、99、113、149 行和各种随机的东西开始。所有数据都以竖线分隔。我有字段名称,并在 Azure SQL Server 中创建了结构化表,我想在其中存储所有数据。我真的被困在如何遍历文件夹和子文件夹,查找与某些模式匹配的文件名,并将所有这些合并到一个数据框中,然后将该对象推送到我的 SQL Server 表中。这似乎是一件非常简单的事情,但我似乎无法让这个该死的东西工作!

我在这里遇到了这个想法:

https://stackoverflow.com/questions/37639956/how-to-import-multiple-csv-files-in-a-single-load

标签: apache-sparkapache-spark-sqldatabricks

解决方案


我终于,终于,终于让这个工作了。

val myDFCsv = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/2019/01/01/client/ABC*.gz")

myDFCsv.show()
myDFCsv.count()

推荐阅读