Создание фрейма данных в цикле с произвольным именем из списка строк в Scala - PullRequest
0 голосов
/ 20 февраля 2019

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

Как и у меня есть список строк, скажем (Product, Customer, Order, ......), и этот список может содержать n элементов, где n может быть любым числом, скажем, до 30. Также столбцыдля каждого элемента в списке указаны в другом файле.

Таким образом, для каждого элемента в списке, как, например, «Продукт», мне нужно создать имя информационного кадра как «Продукт», а позже мне нужно написать «спарк SQL», объединяющий все элементы в этом списке, как показано ниже.

Выберите product.name, customer.name, order.Name Из продукта. Присоединиться к клиенту ... Присоединиться к заказу ...

И этот запрос на присоединение будет динамическим в зависимости от количества элементов всписок.Я думаю создать файл .scala из сценария оболочки.Дайте мне знать ваши предложения.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Эй, я добился этого, создав метод generateDF, как показано ниже.Это берет список файлов как строку ("," разделенный) и файл с определением схемы (",") разделенный и, наконец, файл, который будет содержать данные.

def generateDF(fName: String, schemaFile: String, dataFile: String): Unit = {
// Reading the prod files and creating DataFrame from user defined schema
val SchemaRDD = spark.sparkContext.textFile(schemaFile)
val SchemaString = SchemaRDD.map(_.toString).collect().mkString
val Schema = StructType(SchemaString.split(",").map(column => StructField(column.split(":")(0), inferType(column), true)))
val outDF = spark.read.format("csv")
  .option("delimiter", ",").option("quote", "")
  .option("header", "false")
  .schema(Schema)
  .load(dataFile)
outDF.createTempView(fName)

}

// вызов процедуры для каждого имени таблицы в исходном файле

fileListRDD
      .flatMap(_.split(",")).collect.toList
      .map(file => generateDF(file.mkString.toString, (filePath + file.mkString + ".schema"), (filePath + file.mkString + ".csv")))
0 голосов
/ 20 февраля 2019

Динамический SQL также может быть создан из объекта Scala.Основываясь на пользовательском вводе, сначала создайте СДР.Затем создайте список предполагаемых объектов на основе ваших требований и создайте карту вашего фрейма данных и имени объекта.Затем сгенерируйте строку SQL, используя цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...