Spark Scala несоответствие типов данных - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь найти класс case, соответствующий каждой строке моего файла json. У меня как ошибка:

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot  resolve '`result`' due to data type mismatch: cannot cast
ArrayType(StructType(StructField(hop,LongType,true), StructField(result,ArrayType(StructType(StructField(from,StringType,true), StructField(rtt,DoubleType,true), StructField(size,LongType,true), StructField(ttl,LongType,true)),true),true)),true)  ArrayType(StructType(StructField(result,ArrayType(StructType(StructField(rtt,DoubleType,true), StructField(ttl,IntegerType,true), StructField(from,StringType,true), StructField(size,IntegerType,true)),true),true), StructField(hop,IntegerType,true)),true);

и мой класс дел:

  case class Result(
result: Seq[Result1],
hop:    Int)

case class Result1(
rtt:  Double,
ttl:  Int,
from: String,
size: Int)
case class RootInterface(

dst_name: String,
from:     String,
prb_id:    BigInt,
msm_id:    BigInt,
timestamp: BigInt,
result:    Seq[Result])

Единственная разница - это порядок в двух схемах, является ли проблема причиной исключения? Атрибут результата в исключении отображается классом дела Result.

1 Ответ

0 голосов
/ 19 ноября 2018

Да, порядок важен! Попробуйте это сравнить схемы:

import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._

val jsonSchema1 = new StructType()
    .add("first", LongType)
    .add("second", LongType)

val jsonSchema2 = new StructType()
    .add("second", LongType)
    .add("first", LongType)

println(jsonSchema1 == jsonSchema2)

это должно вывести false . Используйте то же самое, чтобы сравнить свои схемы.

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