Nicht unterstützte literal-Typ-Klasse in Apache Spark in scala
Habe ich folgende Daten:
+---------------+-----------+-------------+-----+------+
| time_stamp_0|sender_ip_1|receiver_ip_2|count|attack|
+---------------+-----------+-------------+-----+------+
|06:10:55.881073| 10.0.0.3| 10.0.0.1| 1 | 0|
|06:10:55.881095| 10.0.0.3| 10.0.0.1| 2 | 0|
|06:10:55.881114| 10.0.0.3| 10.0.0.1| 3 | 0|
|06:10:55.881133| 10.0.0.3| 10.0.0.1| 4 | 0|
|06:10:55.881152| 10.0.0.3| 10.0.0.1| 5 | 0|
|06:10:55.881172| 10.0.0.3| 10.0.0.1| 6 | 0|
|06:10:55.881191| 10.0.0.3| 10.0.0.1| 7 | 0|
|06:10:55.881210| 10.0.0.3| 10.0.0.1| 8 | 0|
Muss ich vergleichen Sie die Gesamt-Standardabweichung auf Spalte "Anzahl" mit sich selbst (mit count-Spalte) in meinem dataframe. Hier ist mein code:
val std_dev=Dataframe_addcount.agg(stddev_pop($"count"))
val final_add_count_attack = Dataframe_addcount.withColumn("attack", when($"count" > std_dev , 0).otherwise(1))
Aber mein problem ist, dass, bekam ich die folgende Fehlermeldung:
Unsupported literal type class org.apache.spark.sql.Dataset [stddev_pop(count): double]
Könnten Sie mir helfen? Vielen Dank.
- In meinem Fall ist es, weil ich sammeln und nicht bemerken, dass ich ein array von Zeilen-Objekte eher als ein array von Strings. Sie können nicht verwenden Sie das Ergebnis sammeln Sie in einer where-Klausel einen Daten-frame, es sei denn, Sie wickeln Sie die Werte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist, weil, wenn und andernfalls sollten Sie die Werte verwenden; nicht std_dev ist ein DataFrame.
Können Sie bekommen Ergebnis: