Scala: создание фрейма данных из серии списков - PullRequest
1 голос
/ 17 марта 2019

Я пытаюсь создать фрейм данных на основе 4 списков, которые у меня есть.мне нужно использовать только scala (мы не можем использовать SQL по разным причинам).

все списки имеют 3 значения, а список column_head представляет собой список имен столбцов.

column_head =["a","b","c"]

master_in =[1,2,"dog"]

master_out =[3,4,"cat"]

master_max = [5,6,"llama"]

я попробовал:

val values 
=Seq(columns_head,master_in,master_out,master_maxweight)

val master_df= values.toDF()

, но я получаю исключение, говорящее: java.lang.ClassNotFoundException: scala.Any

Это, вероятно, потому что последнее значение каждого списка является значением STRING,тогда как первые два для каждого списка являются INTEGERS.

Как мне решить эту проблему?

Я не могу импортировать другие библиотеки за пределами:

import org.apache.spark.sql.functions.desc

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

case class edges(Source: String, Target: String, Weight: Int)

import spark.implicits._

как мне сделать df из списков, которые у меня есть?

1 Ответ

1 голос
/ 18 марта 2019

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

Поскольку в данных присутствуют как целые числа, так и строка, вы не можете рассматривать это как список списков.Ну, вы можете, но тогда «внутренний» список будет иметь тип элемента Any, который является ближайшим общим предком Int и String.Конечно, Spark не может работать с Any.Он слишком общий.

Решение простое: опишите тип данных явно, используя класс case.

case class Data(a: Int, b: Int, c: String)

spark.createDataFrame(Seq(
  Data(1,2,"dog"), Data(3,4,"cat"), Data(5,6,"llama")
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...