Объедините несколько файлов в один фрейм данных и отправьте на Azure SQL Server - PullRequest
0 голосов
/ 09 октября 2019

Я провел некоторое исследование по этому вопросу в течение последних нескольких дней, и я думаю, что я близок к тому, чтобы это заработало, но есть некоторые проблемы, которые я не могу до конца понять.

Я верю в этодолжен работать в среде 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

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Наконец-то, наконец-то, наконец-то все заработало.

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()
0 голосов
/ 09 октября 2019

вы можете найти все файлы с чистым scala и затем передать их в spark:

val file = new File(yourDirectory)
val files: List[String] = file.listFiles
.filter(_.isFile)
.filter(_.getName.startsWith("yourCondition"))
.map(_.getPath).toList

val df = spark.read.csv(files:_*)
...