Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:GraphX:错误:类数组接受类型参数_Scala_Apache Spark_Spark Graphx - Fatal编程技术网

Scala:GraphX:错误:类数组接受类型参数

Scala:GraphX:错误:类数组接受类型参数,scala,apache-spark,spark-graphx,Scala,Apache Spark,Spark Graphx,我正在尝试为GraphX构建Edge RDD。我正在读取csv文件并转换为数据帧,然后尝试转换为边缘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

我正在尝试为GraphX构建Edge RDD。我正在读取csv文件并转换为数据帧,然后尝试转换为边缘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"))))
                                                                                                                                                                      ^


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

数据帧是一个
数据集[Row]
,而不是
数据集[Array[\u]]]
,因此必须进行更改

.map{ (row: Array) => 

或者完全省略键入(应该推断):


你能在缩进代码上重新编译吗?在错误消息中,这条可怕的行也是完全不可读的,但我不知道如何修复它。。。使用灰色的编辑按钮。好的。我将重新运行代码。运行缩进代码后出现相同错误:(当然是同一个错误。但是现在行号实际上是有意义的,因为它没有指向庞大的单行查询。谢谢你的正确答案!我能够通过一些更改使代码正常工作;作为一名新的Scala学习者,如果你能解释如何添加{而不是},我将不胜感激(在map更改map函数的上下文后。谢谢!@HarisIrshad在这个特定的示例中,使用的括号不会改变任何东西,我使用了
{}
而不是
()
因为这是我个人对较长的
映射的偏好,即使用lambda显式声明参数的子句。我这样做是因为更容易将这样的声明更改为模式匹配
{case(…)=>}
,它确实需要
{}
,而不是
()
。因此,这本质上只是一种策略,使代码更易于修改。这对于您的问题不是必需的。导致错误的原因是
行的类型。
res3: Array[org.apache.spark.sql.Row] = Array([0000101,null,B110])
.map{ (row: Array) => 
.map{ (row: Row) =>
.map{ row =>