apache-spark - 将多个文件合并到一个数据框中并推送到 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
解决方案
我终于,终于,终于让这个工作了。
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()
推荐阅读
- python - python冒险游戏的时间系统
- join - 可以在单程中为内存结构构建 FULL JOIN(不使用 sql!)
- three.js - Three.js中的多遍累积渲染
- r - R中的包装函数
- c++ - “uFlags &= ~CHN_PANNING”命令有什么作用?
- angular - 安装时角度/cli给我错误
- javascript - 单击 popup.html 上的按钮时运行 background.js 文件的简单方法
- jenkins - Jenkinsfile:前一个(仍在运行)阶段的卷曲日志
- c - 为什么我的 C 程序做简单的折旧不起作用?
- sql-server - 使用 VS 2017 数据库项目创建数据库时删除索引时出错