【问题标题】:to_json not working with selectExpr in sparkto_json 在 spark 中不能与 selectExpr 一起使用
【发布时间】:2017-06-22 10:02:11
【问题描述】:

我正在阅读数据块博客link 我发现内置函数to_json有问题。 在本教程中爆出的代码中,它返回错误:

org.apache.spark.sql.AnalysisException:未定义函数:'to_json'。此函数既不是注册的临时函数,也不是在数据库“默认”中注册的永久函数。

这是否意味着教程中的这种用法是错误的?在selectExpr 中不能使用udf。我可以将这个to_json 函数注册到默认数据库中吗?

val deviceAlertQuery = notifydevicesDS
                       .selectExpr("CAST(dcId AS STRING) AS key", "to_json(struct(*)) AS value")
                       .writeStream
                       .format("kafka")
                       .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
                       .option("toipic", "device_alerts")
                       .start()

【问题讨论】:

    标签: sql apache-spark


    【解决方案1】:

    您需要将to_json 函数作为

    import org.apache.spark.sql.functions.to_json
    

    这应该有效,而不是 selectExpr

    data.withColumn("key", $"dcId".cast("string"))
      .select(to_json(struct(data.columns.head, data.columns.tail:_*)).as("value")).show()
    

    您还必须使用 spark 2.x

    我希望这有助于解决您的问题。

    【讨论】:

    • 您是否尝试将所有列更改为 json 作为一列并编写它??
    • 更新了答案:)
    • 实际上,我只是尝试按照链接中的教程进行操作。我确实导入了 to_json 函数。但我发现它只在 select 中起作用,但在 selectExpr 中不起作用。那是有线的。所以我希望找到selectExpr中是否只能使用标准的sql函数
    • 我不确定在 selectExpr 中使用 to_json 函数
    【解决方案2】:

    根据我从邮件列表中获得的信息。此函数未从 spark 2.2.0 添加到 SQL 中。这是提交链接:commit。 希望这会有所帮助。 THX Hyukjin Kwon 和 Burak Yavuz。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2020-10-23
      • 2017-05-09
      相关资源
      最近更新 更多