当前位置: 首页 > 知识库问答 >
问题:

导入sqlContext隐含后,Spark toDF无法解析符号

赵星华
2023-03-14

我正在为我的Scala Spark应用程序编写一些单元测试,为了这样做,我需要在测试中创建不同的数据流。因此,我编写了一个非常简短的DFsBuilder代码,它基本上允许我添加新行并最终创建DF。代码是:

class DFsBuilder[T](private val sqlContext: SQLContext, private val columnNames: Array[String]) {
  var rows = new ListBuffer[T]()

  def add(row: T): DFsBuilder[T] = {
    rows += row
    this
  }

  def build() : DataFrame = {
    import sqlContext.implicits._
    rows.toList.toDF(columnNames:_*) // UPDATE: added :_* because it was accidently removed in the original question
  }
}

但是,toDF方法不能使用不能解析符号toDF进行编译。

    null

显然,我首先搜索了这个问题,但只发现了一些例子,其中人们忘记导入SQLContext.Implicits方法或关于case类的一些东西超出了范围,这可能与我现在遇到的问题不同

提前致谢

共有1个答案

师建德
2023-03-14

如果查看TODFSQLimplicits.localSeqToDataFrameHolder(使用的隐式函数)的签名,您将能够检测到两个问题:

>

  • typet必须是product的子类(所有case类的超类,元组...),并且必须为它提供隐式的typeTag。要解决这个问题-将类的声明更改为:

    class DFsBuilder[T <: Product : TypeTag](...) { ... }
    

    columnnames参数不属于array类型,它是一个“重复参数”(类似于Java的“varargs”,请参见这里的4.6.2节),因此必须将数组转换为参数:

    rows.toList.toDF(columnNames: _*)
    

    通过这两个更改,您的代码可以编译(并工作)。

  •  类似资料:
    • 我一直收到错误消息“无法解析符号‘api’”我正在开发一个应用程序,使用谷歌地点应用编程接口跟踪用户位置。我一直试图让它工作,但我的进口报表给我带来了麻烦。我在不同的地方找过,我找到的来源都告诉我不同的事情,比如... 将“compile'com.google.android.gms:play services:9.8.0”放入构建中。格雷德尔。这通常会导致项目无法同步。我对此做了一些研究,其中提

    • 我想使用Scala中的DefaultParsers和IDEA。我想测试一下:http://www.scala-sbt.org/0.13.1/docs/detailt-topics/parsing-input.html 但我的导入不管用。 在我的文件中。Scala: 导入sbt._导入sbt.complete.DefaultParsers._

    • 对于不同的库和不同的项目,这个问题间歇性地发生。尝试导入库时,会识别包,但无法解析类名。 如果在import语句上,I,我会看到侧窗格中显示的所有反编译类--包括我需要的类--如果我尝试自动完成import语句,我会注意到我需要的类没有显示在下拉列表中。 我已经试过让缓存失效了,但不起作用。我找不到任何类冲突--在我的类路径中没有具有相同包名的其他jar文件。我能够将这个类导入到其他项目中。 有人

    • 请温柔点,我正在将我的项目从Eclipse转移到Android Studio。第一个问题是,我现在所有的活动都有解决“R”的问题。我有一种感觉,这是因为支持库产生的。一般来说,我只使用V.4库,但现在在android studio中,我得到了以下错误: /users/vedtam/studioProjects/foto.studio/fotostudio/build/interediates/ex

    • 问题内容: 出于某种原因,在完成了Phonegap的非包含性说明(甚至没有提到设置ANT,或者没有遇到Ant和JDK的麻烦)之后,这根本不起作用: 它给出了5个错误,指出无法解析org.apache.cordova的事实。我完全确定此时该怎么办。请帮忙。这是在尝试使sdk正常工作并最终能够在eclipse中打开项目的3个小时之后。按照他们的文档中的步骤进行操作后,除非能弄清楚,否则我将浪费3个小时

    • 问题内容: 我在用macOS 10.13.5编写的MacBookPro上安装了Eclipse [Version:Photon Release(4.8.0)]和JDK 10。 我得到错误: 导入java.awt无法解析 是包含在JDK 10?如果是,在哪里,如何使Eclipse可见?如果没有,如何添加java.awt? 问题答案: 是包含在JDK 10? 是的,包裹确实存在。Java10 API文档