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