scala中Apache Spark中不支持的文字类型类

时间:2017-06-28 14:28:21

标签: scala apache-spark

我有以下数据:

    +---------------+-----------+-------------+-----+------+
    |   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列上的总标准差与其自身(带计数列)。这是我的代码:

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]
你可以帮帮我吗?非常感谢。

2 个答案:

答案 0 :(得分:2)

这是因为在何时以及其他时候你应该使用价值观;不是std_dev是一个DataFrame。

你可以得到结果:

val stdDevValue = std_dev.head().getDouble(0)

val final_add_count_attack = Dataframe_addcount.withColumn("attack", when($"count" > lit(std_dev), lit(0)).otherwise(lit(1)))

答案 1 :(得分:-1)

会有一些与常量相关的代码,其中需要双引号,但是代码将具有单引号或不带引号。通常在您拥有lit('0')并将其更正为lit("0")

时发生