Относительно org. apache .spark. sql .AnalysisException ошибка при создании файла JAR с использованием Scala - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующий простой Scala класс, который я позже изменю для соответствия некоторым моделям машинного обучения.

Мне нужно создать файл jar из этого, поскольку я собираюсь запустить эти модели в amazon-emr. Я новичок в этом процессе. Поэтому я сначала проверил, могу ли я успешно импортировать следующий CSV-файл и записать в другой файл, создав файл JAR с использованием класса Scala, упомянутого ниже.

CSV-файл выглядит следующим образом и содержит в качестве одной из переменных столбец Date.

+-------------------+-------------+-------+---------+-----+
|               Date|      x1     |    y  |      x2 | x3  |       
+-------------------+-------------+-------+---------+-----+
|0010-01-01 00:00:00|0.099636562E8|6405.29|    57.06|21.55|
|0010-03-31 00:00:00|0.016645123E8|5885.41|    53.54|21.89|
|0010-03-30 00:00:00|0.044308936E8|6260.95|57.080002|20.93|
|0010-03-27 00:00:00|0.124928214E8|6698.46|65.540001|23.44|
|0010-03-26 00:00:00|0.570222885E7|6768.49|     61.0|24.65|
|0010-03-25 00:00:00|0.086162414E8|6502.16|63.950001|25.24| 

Ссылка на набор данных: https://drive.google.com/open?id=18E6nf4_lK46kl_zwYJ1CIuBOTPMriGgE

Я создал файл jar из этого файла, используя intelliJ IDEA. И это было успешно сделано.

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


      val sc: SparkSession = SparkSession.builder()
        .appName("SparkByExample")
        .getOrCreate()

       val data = sc.read.format("csv")
      .option("header","true")
      .option("inferSchema","true")
      .load(args(0))

    data.write.format("text").save(args(1))

  }

}

После этого я загружаю этот файл jar вместе с файлом csv, упомянутым выше в amazon-s3, и пытался запустить его в кластере amazon-emr.

Но это не удалось, и я получил следующее сообщение об ошибке:

ERROR Client: Application diagnostics message: User class threw exception: org.apache.spark.sql.AnalysisException: Text data source does not support timestamp data type.;

Я уверен, что эта ошибка связана с переменной Date в наборе данных. Но я не знаю, как это исправить.

Может кто-нибудь помочь мне разобраться?

Обновлено:

Я пытался открыть тот же CSV-файл, который упоминал ранее, без даты колонна В этом случае я получаю эту ошибку:

ERROR Client: Application diagnostics message: User class threw exception: org.apache.spark.sql.AnalysisException: Text data source does not support double data type.;

Спасибо

1 Ответ

1 голос
/ 10 апреля 2020

Как я позже обратил внимание, что вы собираетесь писать в текстовый файл. Spark's .format(text) не поддерживает никаких определенных c типов, кроме String / Text. Таким образом, чтобы достичь цели, вам нужно сначала преобразовать все типы в строку и сохранить:

    df.rdd.map(_.toString().replace("[","").replace("]", "")).saveAsTextFile("textfilename")

Если вы можете рассмотреть другие варианты для хранения данных в виде файлов, то вы можете воспользоваться преимуществами типов , Например, используя CSV или JSON. Это рабочий пример кода на основе вашего CSV-файла для CSV.

val spark = SparkSession.builder
  .appName("Simple Application")
  .config("spark.master", "local")
  .getOrCreate()
import spark.implicits._
import spark.sqlContext.implicits._

val df = spark.read
  .format("csv")
  .option("delimiter", ",")
  .option("header", "true")
  .option("inferSchema", "true")
  .option("dateFormat", "yyyy-MM-dd")
  .load("datat.csv")

df.printSchema()
df.show()

df.write
  .format("csv")
  .option("inferSchema", "true")
  .option("header", "true")
  .option("delimiter", "\t")
  .option("timestampFormat", "yyyy-MM-dd HH:mm:ss")
  .option("escape", "\\")
  .save("another")

Нет необходимости настраивать кодер / декодер.

...