Spark - Scala - Как конвертировать DataFrame в пользовательский объект? - PullRequest
0 голосов
/ 09 октября 2018

Вот код блока.В фрагменте кода я читаю многострочное json и преобразовываю в Emp объект.

 def main(args: Array[String]): Unit = {

    val filePath = Configuration.folderPath + "emp_unformatted.json"
    val sparkConfig = new SparkConf().setMaster("local[2]").setAppName("findEmp")

    val sparkContext = new SparkContext(sparkConfig)
    val sqlContext = new SQLContext(sparkContext)
    val formattedJsonData = sqlContext.read.option("multiline", "true").json(filePath)
    val res = formattedJsonData.rdd.map(empParser)
    for (e <- res.take(2)) println(e.name + " " + e.company + " " + e.about)

  }

  case class Emp(name: String, company: String, email: String, address: String, about: String)

  def empParser(row: Row): Emp =
    {
      new Emp(row.getAs("name"), row.getAs("company"), row.getAs("email"), row.getAs("address"), row.getAs("about"))
    }

Мой вопрос: правильный ли подход "formattedJsonData.rdd.map(empParser)"?Я конвертирую в RDD из Emp Object.1. это правильный подход.2. Предположим, у меня есть записи 1L, 1M, в этом случае возникает проблема с производительностью.3. есть ли лучший вариант для преобразования коллекции emp

1 Ответ

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

Если вы используете spark 2, вы можете использовать dataset, что также равно type-safe плюс, что обеспечивает преимущества производительности DataFrames.

val df = sqlSession.read.option("multiline", "true").json(filePath)

import sqlSession.implicits._

val ds: Dataset[Emp] = df.as[Emp]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...