首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将2个Scala Spark Dataframe和一个Long值转换为一个JSON字符串

将2个Scala Spark Dataframe和一个Long值转换为一个JSON字符串
EN

Stack Overflow用户
提问于 2020-08-06 22:12:56
回答 1查看 39关注 0票数 0

我在scala/spark数据管道中有3个对象。2是数据帧,1是长值。

我需要创建一个单独的json对象,其中包括3个对象。

例如,如果将特定日期作为请求传递给应用程序api:

代码语言:javascript
运行
复制
val df1 = getDF_1(date)
val df2 = getDF_2(date)
val value_3 = getValue_3(date)

我可以单独地将它们转换为json,但我很难创建一个JSON响应,比如:

代码语言:javascript
运行
复制
response = {"date":date, "values"{
                                  "df1":{nested json report}
                                  "df2":{nested json report}
                                  "long3":23234
                                 }
             }

下面是数据帧的创建方式:

代码语言:javascript
运行
复制
case class IpAccessCount(ip:String, uri:String, accessCount:Long)
    def toIpAccessCount(ip:String, uri:String, accessCount:Long): IpAccessCount = IpAccessCount(ip, uri,accessCount)
    val ipAccessCount=udf(toIpAccessCount _)
    spark.udf.register("ipAccessCount", ipAccessCount)
    
    val ipAccessCountByDate = spark.sql("""select ip, uri, datetime, count(*) as accessCount from csvData group by ip, uri, datetime """)
    ipAccessCountByDate.createOrReplaceTempView("ipAccessCountByDate")
    def GetDateIpAccessCount(date_as_str:String)= 
    ipAccessCountByDate.filter(col("datetime")===s"$date_as_str").drop("datetime").map(r => toIpAccessCount(r.getString(0), r.getString(1), r.getLong(2))).toDF().coalesce(1)

我不知道如何将它们合并到单个json响应中。非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-08-06 23:46:53

如果你真的需要以这种方式实现,我有一个解决方案。

代码语言:javascript
运行
复制
val df1 = "[" + getDF_1(date).toJSON.collect().mkString(",") + "]"
val df2 = "[" + getDF_2(date).toJSON.collect().mkString(",") + "]"
val value_3 = getValue_3(date)

val json_response = s"""
      |{"date":"${date}", "values":{
      |                                  "df1":"${df1}",
      |                                  "df2":"${df2}",
      |                                  "long3":23234
      |                                 }
      |             }
      |""".stripMargin

说明:让我们创建同时包含df1和df2的JSON数组字符串。然后将df1、df2、date作为json字符串附加到json_response中,如果需要,可以将该字符串转换为JSON对象。

注意:如果在df1或df2中有大量数据,那么在执行collect()时,可能会出现内存不足异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63285484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档