我在scala/spark数据管道中有3个对象。2是Dataframe,1是长值。
我需要创建一个包含这3个对象的json对象。
例如,如果将特定日期作为请求传递给应用程序api:
val df1 = getDF_1(date)
val df2 = getDF_2(date)
val value_3 = getValue_3(date)
我可以将这些单独转换为json,但我花了很多时间来创建一个单独的json响应,如:
response = {"date":date, "values"{
"df1":{nested json report}
"df2":{nested json report}
"long3":23234
}
}
这是创建Dataframe的方式:
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响应中。谢谢!
1条答案
按热度按时间y4ekin9u1#
我有一个解决办法,如果你真的要实施这种方式。
说明:让我们创建df1和df2的json数组字符串。然后将df1、df2、date作为一个json字符串附加到json\u响应中,您可以根据需要将这个字符串转换成json对象。
注意:如果在df1或df2中有大量数据,就像在collect()中一样,可能会出现内存不足异常。