NumberFormatException при попытке выполнить sort () или orderBy () на фрейме данных в искре с использованием scala? - PullRequest
0 голосов
/ 06 июля 2018

У меня есть фрейм данных df , который имеет 3 столбца (как показано на рисунке). фрейм данных когда я выполню

import sqlContext.implicits._
df.sort($"count".desc)

или

import org.apache.spark.sql.functions._
df.orderBy(desc("count"))

кажется, что это было сделано успешно, но когда я пытаюсь show() или collect(), я получаю следующую ошибку-

18/07/06 05:06:56, 594 ИНФОРМАЦИЯ SparkContext: Начало работы: показывать по адресу: 52 18/07/06 05:06:56, 596 INFO DAGScheduler: получил задание 6 (показ по адресу: 52) с 2 выходными разделами 18/07/06 05:06:56, 596 INFO DAGScheduler: Финальная стадия: ResultStage 6 (показ по адресу: 52) 18/07/06 05:06:56, 596 INFO DAGScheduler: Родители финальной стадии: Список () 18/07/06 05:06:56, 596 ИНФОРМАЦИЯ DAGScheduler: Пропавшие родители: Список () 18/07/06 05:06:56, 596 INFO DAGScheduler: отправка ResultStage 6 (MapPartitionsRDD [20] на выставке в: 52), в которой нет пропавших родителей , , , Потерянное задание 1.0 на этапе 6.0 (TID 11, localhost): java.lang.NumberFormatException: для входной строки: «Синт-Эстатиус» в java.lang.NumberFormatException.forInputString (NumberFormatException.java:65) в java.lang.Integer.parseInt (Integer.java:580) на java.lang.Integer.parseInt (Integer.java:615) в scala.collection.immutable.StringLike $ class.toInt (StringLike.scala: 229) в scala.collection.immutable.StringOps.toInt (StringOps.scala: 31) , , , .

и так далее.

только некоторые строки, потому что он слишком большой Есть ли другой способ отсортировать эту DF на основе столбца -count ???

редактировать 1

это результат отображения кадра данных. df.show ()

редактировать 2

при попытке выполнить с помощью sqlContext , следующим образом -

val df1=sqlContext.sql("SELECT * from df  order by count desc").collect()

Я получаю таблицу не найдена ошибка. как мне преобразовать df в таблицу?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вот мой фрейм данных и запросы, которые я написал и работает нормально.

val sparkSession=SparkSession.builder().master("local").appName("LearnScala").getOrCreate()
val data = sparkSession.sparkContext.parallelize(Seq(Row(1, "A", "B"), Row(2, "A", "B")))
val schema = StructType(Array( StructField("col1", IntegerType, false),StructField("col2", StringType, false), StructField("col3", StringType, false)))
val df = sparkSession.createDataFrame(data, schema)

//df.show
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   A|   B|
|   2|   A|   B|
+----+----+----+

df.orderBy(desc("col1")).show
df.sort(df.col("col1").desc).show

//Above both expressions produces the same output like below
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   2|   A|   B|
|   1|   A|   B|
+----+----+----+
0 голосов
/ 06 июля 2018

Поймите, что Spark не будет вычислять любой код, пока вы не примените действие к dataFrame / RDD; другими словами, СДР / ДФ лениво оцениваются. Прочитать документацию Spark

Теперь в вашем случае orderBy и sort - это преобразования, и искра не будет выполнять какой-либо код, пока у вас нет преобразования, а show и collect - действия, которые сообщают искре orderBy или sort и получить результат.

Ошибка, которая у вас сейчас есть, связана со строкой Sint Eustatius в столбце count, которая является строковым типом, а строковый тип нельзя преобразовать в Integer.

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

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