【发布时间】:2015-03-25 20:03:58
【问题描述】:
在 Spark 中获得一些 Row 类(Dataframe 或 Catalyst)后,我想在我的代码中将其转换为案例类。这可以通过匹配来完成
someRow match {case Row(a:Long,b:String,c:Double) => myCaseClass(a,b,c)}
但是当行有大量列时,它会变得很难看,比如十几个双精度数、一些布尔值甚至偶尔的空值。
我希望能够 - 抱歉 - 将 Row 转换为 myCaseClass。有没有可能,或者我已经得到了最经济的语法?
【问题讨论】:
-
可能无形(github.com/milessabin/shapeless/wiki/…)可以帮助减少样板,但可能不太喜欢
nulls。也许宏(如果你有很多案例类)? -
从未尝试过宏。这里的一个问题是我是语言标准的信徒。我可以想象我总是可以做我自己的方法,或者使用其他人......但我更愿意尝试理解它是如何在没有任何外部因素的情况下完成的。
-
想知道...也许我可以从 Row 继承“myCaseClass”?
-
这太令人失望了。我有一个大而复杂的案例类,现在需要在我想加载和使用它时手动将每一列映射回它。这让我很难过:-(
标签: scala apache-spark apache-spark-sql