scala - 创建包含具有整数属性的案例类实例的 DataFrame
问题描述
Spark 无法将一系列此类实例转换为 DataFrame/Dataset,这不是一个很好的开发人员体验。
这是一个错误还是预期的功能?
考虑一个例子:
import spark.implicits._
case class Test(`9`: Double)
这失败了:
val failingTest = Seq(Test(9.0)).toDF()
这工作正常:
val successfulTest = Seq(9.0).toDF("9").as[Test]
successfulTest.show()
解决方案
如果您看到声明变量的先决条件以及如何命名它们,那么您如何指定变量名称是不允许的。
The variable name must start with a letter and cannot begin with a number or other characters
只需将您的案例类更改为使用不带符号的字符串变量名称,如下所示,它应该可以工作。
import spark.implicits._
case class Test(Id: Double)
val failingTest = Seq(Test(9.0)).toDS()
上面的代码行将为您提供一个测试数据集,如下所示:
failingTest: org.apache.spark.sql.Dataset[Test] = [Id: double]
val failingTest1 = Seq(test).toDF()
上面的行将为您提供一个 Dataset of Row,即 DataFrame,如下所示:
failingTest1: org.apache.spark.sql.DataFrame = [Id: double]
它给您错误,因为您没有以正确的格式提供名称。您也可以将其视为错误,因为当您创建我认为应该完成的案例类时,它不会给您错误。
如果您只删除值 9 并使用如下任何字符,您的代码也可以工作:
import spark.implicits._
case class Test1(`i`: Double)
val failingTest = Seq(Test1(9.0)).toDF()
推荐阅读
- ios - 内容可用的静默通知未调用正确的 AppDelegate 方法
- javascript - 查询输入失败
- c# - 如果应用程序处于挂起状态,如何检查 AppServiceConnection 实时状态并使应用程序处于运行状态
- asp.net-mvc - 如何将 ASP.NET Core MVC API 和 Blazor WebAssembly 作为单个解决方案运行和托管?
- php - sum的结果在哪里?
- python - 如何将基于类的视图转换为基于函数的视图?- 姜戈
- r - R 3.5.2:自定义函数内的管道 - 找不到对象“列”
- scala - 在scala中编写自定义monad时的withFilter实现
- python - 在 ubuntu 中运行 buildozer 时找不到 Git (git)
- ios - 水平 UICollectionViewCompositionalLayout 在项目单元格上显示部分标题