У меня есть около четырех * .sql автономных дампов (около 20 ГБ каждый), которые мне нужно преобразовать в наборы данных в Apache Spark.
Я попытался установить и создать локальную базу данных с использованием InnoDB и импортировать дамп, но это кажется слишком медленным (потратил на это около 10 часов)
Я напрямую считываю файл в искру, используя
import org.apache.spark.sql.SparkSession
var sparkSession = SparkSession.builder().appName("sparkSession").getOrCreate()
var myQueryFile = sc.textFile("C:/Users/some_db.sql")
//Convert this to indexed dataframe so you can parse multiple line create / data statements.
//This will also show you the structure of the sql dump for your usecase.
var myQueryFileDF = myQueryFile.toDF.withColumn("index",monotonically_increasing_id()).withColumnRenamed("value","text")
// Identify all tables and data in the sql dump along with their indexes
var tableStructures = myQueryFileDF.filter(col("text").contains("CREATE TABLE"))
var tableStructureEnds = myQueryFileDF.filter(col("text").contains(") ENGINE"))
println(" If there is a count mismatch between these values choose different substring "+ tableStructures.count()+ " " + tableStructureEnds.count())
var tableData = myQueryFileDF.filter(col("text").contains("INSERT INTO "))
Проблема в том, что дамп также содержит несколько таблиц, каждая из которых должна стать набором данных. Для чего мне нужно понять, сможем ли мы сделать это хотя бы для одного стола. Есть ли какой-нибудь парсер .sql, написанный для scala spark?
Есть ли более быстрый способ сделать это? Могу ли я прочитать его непосредственно в куст из автономного файла .sql?
ОБНОВЛЕНИЕ 1: я пишу синтаксический анализатор для этого на основе входных данных Ajay
ОБНОВЛЕНИЕ 2: изменение всего кода на набор данных для использования синтаксического анализатора SQL в соответствии с предложением