scala - 将列表缓冲区中的数据帧行变成一列
问题描述
我正在尝试从我拥有的对象列表缓冲区中创建一个数据框。
我有一个不同的列表缓冲区,Fruit
并希望使用这些事件创建一个 Dataframe 行(忽略案例类中的列)
import spark.implicits._
case class Fruit(
indentifier: String,
name: String)
var fruits= new scala.collection.mutable.ListBuffer[Any]()
val fruit1 = Fruit("one", "banana")
val fruit2 = Fruit("two", "apple")
val fruit3 = Fruit("three", "orange")
fruits+= fruit1
fruits += fruit2
fruits+= fruit3
val x = fruits.toSeq.toDF()
我的目标是创建不同的行,然后从这些行中创建一个数据框
我的对象数量和fruits
内容都可以改变。在这种情况下,我试图让我的行是:
[{"indentifier":"one", "name":"banana"}, {"indentifier":"two", "name":"apple"}, {"indentifier":"three", "name":"orange"}]
+---------------------------------------------------------------------------------------------------------------------------+
|Fruits
+------------------------------------------------------------------------------------------------------------------------------
|[{"indentifier":"one", "name":"banana"}, {"indentifier":"two", "name":"apple"}, {"indentifier":"three", "name":"orange"}] |
+-----------------------------------------------------------------------------------------------------------------------------+
我试图这样做fruits.toSeq.toDF()
但不能这样做,因为“toDF 不是 Seq[Any] 的成员”
解决方案
我们可以将您的列表缓冲区声明为案例类而不是Any
?如果是这样,这对我来说很好:
var fruits= new scala.collection.mutable.ListBuffer[Fruit]()
val fruit1 = Fruit("one", "banana")
val fruit2 = Fruit("two", "apple")
val fruit3 = Fruit("three", "orange")
fruits+= fruit1
fruits += fruit2
fruits+= fruit3
val x = Seq(fruits).toDF()
// x: org.apache.spark.sql.DataFrame = [value: array<struct<indentifier:string,name:string>>]
x
在这种情况下,与您指定的所需输出相匹配,请注意show
它spark-shell
可能看起来不同。结果x.show(false)
:
+----------------------------------------------+
|value |
+----------------------------------------------+
|[[one, banana], [two, apple], [three, orange]]|
+----------------------------------------------+
推荐阅读
- erlang - 了解 erlang ETS 匹配规范的行为
- http - 在生产中收到来自 HTTP 请求的响应后,您会做什么?
- microsoft-graph-api - Microsoft Graph API 创建 OnlineMeetings 错误 - 不应为空\r\n参数名称: 会议
- typescript - 如何将 Typescript“对象”定义为所有接口类型的记录
- android - 带有计时器崩溃的Android服务更新UI
- terraform - 使用 terragrunt generate provider 块会导致与模块中的 require providers 块发生冲突
- html - 如何定位元素?
- c - FLEX 查找文本中的正则表达式
- python - 在 python 类中使用装饰器,未定义的变量
- javascript - 有没有一种简单的方法来使用自动完成搜索来触发预定义的模态?