【发布时间】:2020-09-03 21:12:24
【问题描述】:
我有以下数据:
+---------------+-----------+-------------+-----+------+
| 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|
我需要在我的数据框中将 count 列的总标准偏差与它本身(带有 count 列)进行比较。这是我的代码:
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))
但是我的问题是,我收到以下错误:
Unsupported literal type class org.apache.spark.sql.Dataset [stddev_pop(count): double]
你能帮帮我吗?非常感谢。
【问题讨论】:
-
在我的情况下,这是因为我使用了 collect 并且没有注意到我得到的是 Row 对象数组而不是字符串数组。除非您解开这些值,否则您不能在数据框的 where 子句中使用 collect 的结果。
标签: scala apache-spark