Как сохранить тип структуры с помощью коннектора искровой кассандры - PullRequest
0 голосов
/ 05 ноября 2019

У меня следующая структура JSON, в которой есть данные о сотрудниках и их адрес -

[
{"id" : 1000, "name" : "dev", "age" : 30, "address" : 
       {"city":"noida","state":"UP","pincode":"201201"}},
{"id" : 1001, "name" : "ravi", "age" : 36, "address" : 
       {"city":"noida","state":"UP","pincode":"201501"}} 
]

И у меня есть эта таблица в Кассандре -

create table sparkdb.employee (id bigint, name text, age int, city text, state text, pincode text, primary key(id));

Теперь у меня есть вопрос, какхранить выше JSON, где адрес вложен structType в таблицу сотрудников в Cassandra. ?

Это урезанный код, который у меня есть -

 val spark = SparkSession.builder()
  .appName("CassandraConnectorIntegration")
  .master("local[*]")
  .getOrCreate()

val empDF = spark.read
  .option("multiline", true)
  .json(getClass.getResource("/sparksql/employee.json").getPath)

empDF.printSchema()

import spark.implicits._
val empDS = empDF.as[Employee]


empDS.write
  .format("org.apache.spark.sql.cassandra")
  .mode(SaveMode.Overwrite)
  .option("confirm.truncate", "true") // this mode is required when using Overwrite mode
  .option("spark.cassandra.connection.host", "127.0.0.1")
  .option("spark.cassandra.connection.port", "9042")
  .option("keyspace", "sparkdb")
  .option("table", "employee")
  .save()

}

case class Address(city: String, state: String, pincode: String)
case class Employee(id: Long, name: String, age: Long, address: Address)

Примечание. Один из известных мне способов - сначала выбрать столбцы с псевдонимом, а затем вставить этот кадр данных, что означает -

empDS.createOrReplaceTempView("employee")
val empDF_out = spark.sql("select id, name, age, address.city city, address.state state, address.pincode pincode from employee")
empDF_out.write.format() .... ... .... 

Но мне это не кажется хорошим, то есть, если у меня так много столбцов, я должен сначала выбрать их по отдельности.

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