sql - to_json 不能在 spark 中使用 selectExpr

标签 sql apache-spark

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

org.apache.spark.sql.AnalysisException: Undefined function: 'to_json'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.

这是否意味着教程中的这种用法是错误的?并且不能在 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()

最佳答案

您需要将 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

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

关于sql - to_json 不能在 spark 中使用 selectExpr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44696195/

相关文章:

hadoop - 百万歌曲数据集是否以 .tsv 或 .csv 格式提供?

apache-spark - Kafka 结构化流 java.lang.NoClassDefFoundError

sql - 为什么SQL既支持两个单引号又支持反斜杠转义

php - mysql查询一次查询提取多条记录

sql - 如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE

Scala:什么是 CompactBuffer?

MYSQL:在值不是特定值的情况下获取字段的平均值

mysql - SQL案例少行分析

hadoop - 使用接收器和 WAL 的 Spark Kafka 集成

hadoop - 使用YARN的Spark流应用程序配置