Итак, у меня есть фрейм данных, как показано ниже, который был сохранен как временное представление под именем mean_value_gn5
, так что я могу запрашивать, используя sql()
, всякий раз, когда мне нужно получить данные.
+-------+----+
|Species|Avgs|
+-------+----+
| NO2| 43|
| NOX| 90|
| NO| 31|
+-------+----+
В этом информационном кадре хранится среднеквадратичное значение «видов», округленное до ближайшего целого числа с использованием функции ceil()
. Мне нужно использовать эти категорические средние значения, чтобы рассчитать отсутствующие значения столбца Value
в моем интересующем кадре данных clean_gn5
. Я создал новый столбец Value_imp
, который будет содержать мой последний столбец с вмененными значениями.
Я попытался сделать это следующим образом:
clean_gn5 = clean_gn5.withColumn("Value_imp",
when($"Value".isNull, sql("Select Avgs from mean_value_gn5 where Species = "+$"Species").select("Avgs").head().getLong(0).toInt)
.otherwise($"Value"))
Вышеупомянутый код запускается, но значения неправильно вменяются, т. е. для строки, содержащей Species
как NO
значение, которое вменяется, равно 43
вместо 31
.
Перед этим я сначала проверил, смог ли я чтобы правильно получить значения, выполнив следующее:
println(sql("Select Avgs from mean_value_gn5 where Species = 'NO'").select("Avgs").head().getLong(0))
Я могу правильно получить значение после жесткого кодирования Species
, и, согласно моему пониманию, $"Species"
должно помочь мне получить значение, соответствующее Species
столбец для этой конкретной строки.
Также я подумал, что, возможно, мне не хватало одинарных кавычек вокруг жестко закодированного значения Species
, то есть 'NO'
. Поэтому я попытался сделать следующее
clean_gn5 = clean_gn5.withColumn("Value_imp",
when($"Value".isNull, sql("Select Avgs from mean_value_gn5 where Species = '"+$"Species"+"'").select("Avgs").head().getLong(0).toInt)
.otherwise($"Value"))
Но это привело к следующему исключению.
Exception in thread "main" java.util.NoSuchElementException: next on empty iterator
Я довольно новичок в Spark и Scala.