【问题标题】:Scala: GraphX: error: class Array takes type parametersScala:GraphX:错误:类数组采用类型参数
【发布时间】:2018-03-06 02:56:57
【问题描述】:

我正在尝试为 GraphX 构建 Edge RDD。我正在读取 csv 文件并转换为 DataFrame 然后尝试转换为 Edge RDD:

val staticDataFrame = spark.
  read.
  option("header", true).
  option("inferSchema", true).
  csv("/projects/pdw/aiw_test/aiw/haris/Customers_DDSW-withDN$.csv")

val edgeRDD: RDD[Edge[(VertexId, VertexId, String)]]  = 
  staticDataFrame.select(
    "dealer_customer_number",
    "parent_dealer_cust_number",
    "dealer_code"
  ).map{ (row: Array) => 
    Edge((
      row.getAs[Long]("dealer_customer_number"), 
      row.getAs[Long]("parent_dealer_cust_number"),
      row("dealer_code")
    ))
  }

但我收到此错误:

<console>:81: error: class Array takes type parameters
       val edgeRDD: RDD[Edge[(VertexId, VertexId, String)]]  = staticDataFrame.select("dealer_customer_number", "parent_dealer_cust_number", "dealer_code").map((row: Array) => Edge((row.getAs[Long]("dealer_customer_number"), row.getAs[Long]("parent_dealer_cust_number"), row("dealer_code"))))
                                                                                                                                                                      ^

结果

staticDataFrame.select("dealer_customer_number", "parent_dealer_cust_number", "dealer_code").take(1)

res3: Array[org.apache.spark.sql.Row] = Array([0000101,null,B110])

【问题讨论】:

  • 能否请您对缩进的代码重新运行编译?错误消息中的可怕行也完全不可读,但我不知道如何解决这个问题...使用灰色的 edit 按钮。
  • 好的。我将重新运行代码。
  • 运行缩进代码后出现同样的错误:(
  • 当然是同样的错误。但是现在行号其实是有意义的,因为它并不指向庞大的单行查询。

标签: scala apache-spark spark-graphx


【解决方案1】:

首先,Array 接受类型参数,因此您必须编写 Array[Something]。但这可能不是你想要的。

数据框是Dataset[Row],而不是Dataset[Array[_]],因此您必须更改

.map{ (row: Array) => 

.map{ (row: Row) =>

或者只是完全省略输入(应该可以推断):

.map{ row =>

【讨论】:

  • 感谢您的正确回答!我可以通过一些更改使代码工作;作为一个新的 Scala 学习者,如果您能解释如何在 map 更改 map 函数的上下文之后添加 { 而不是 ( ,我将不胜感激。谢谢!
  • @HarisIrshad 在这个特定的例子中,使用括号的类型根本不应该改变任何东西,我使用{}而不是(),因为这是我个人偏好更长的map - 带有显式声明参数的 lambda 子句。我这样做是因为将这样的声明更改为匹配{ case (...) =&gt; } 的模式更容易,这确实 需要{} 而不是()。因此,它本质上只是一种使代码更易于修改的策略。这对您的问题不是必需的。 row 的类型是导致错误的原因。
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2014-03-28
  • 1970-01-01
  • 2023-01-20
  • 2020-02-23
相关资源
最近更新 更多