【问题标题】:Unsupported literal type class in Apache Spark in scalaScala 中的 Apache Spark 中不支持的文字类型类
【发布时间】: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


【解决方案1】:

这是因为你应该在什么时候使用价值;不是 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)))

【讨论】:

  • 感谢您的回答。我应该如何将 std_dev 转换为双倍?我应该使用另一种方法来计算标准偏差吗?谢谢
  • 谢谢,只是一个小问题是 getAsDouble 在我的 intellij 想法中无法识别。 :(
  • 它是 getDouble - 我已经修好了
  • @T.Gawęda 我在过滤时遇到了类似的错误......如何解决它...... result_df.filter(col("indicator") === lit('N')) .... ERROR ::: RuntimeException: Unsupported literal type class java.lang.Character N
  • @user3252097 使用“N”而不是“N”
【解决方案2】:

会有一些与常量相关的代码需要双引号,但代码会有单引号或没有引号。通常发生在您有lit('0') 时,将其更正为lit("0")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 2018-09-12
    • 2020-10-19
    • 2021-05-12
    • 2015-10-27
    • 2019-04-21
    • 2016-08-12
    • 2019-12-28
    相关资源
    最近更新 更多