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

标签 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|

我需要将数据框中计数列的总标准差与其本身(与计数列)进行比较。这是我的代码:

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]

你能帮我吗?多谢。

最佳答案

这是因为在什么时候以及其他情况下你应该使用值;不是 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)))

关于scala - scala 中的 Apache Spark 中不支持的文字类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44805407/

相关文章:

scala - 优化案例类用作符号

apache-spark - spark广播变量的大小有限制吗?

java - 将 Java-Pair-Rdd 转换为 Rdd

scala - 如何使用 sbt-native-packager 设置 Docker 注册表

java - Java 中最近的 FFTW 包装器

scala - Spark/Scala 打开压缩的 CSV 文件

java - Spark 独立

scala - 与 S3 的 Spark 流连接给出了 Forbidden 错误

scala - 为什么 Scala 编译器不使用抽象类型推断类型

java - Akka-Java进程间通信