Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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 错误:java.util.Collections$UnmodifiableRandomAccessList不是有效的_Scala_Apache Spark_Neo4j - Fatal编程技术网

Scala 错误:java.util.Collections$UnmodifiableRandomAccessList不是有效的

Scala 错误:java.util.Collections$UnmodifiableRandomAccessList不是有效的,scala,apache-spark,neo4j,Scala,Apache Spark,Neo4j,编辑:仍然没有修复,但我知道密码返回的值是导致错误的原因: defined class DateLayerData defined class ChangeScoreObj changeScoreMap: java.util.Map[Integer,ChangeScoreObj] = {} doCalculation: (lat1: BigDecimal, lon1: BigDecimal, lat2: BigDecimal, lon2: BigDecimal, radius: Double)U

编辑:仍然没有修复,但我知道密码返回的值是导致错误的原因:

defined class DateLayerData
defined class ChangeScoreObj
changeScoreMap: java.util.Map[Integer,ChangeScoreObj] = {}
doCalculation: (lat1: BigDecimal, lon1: BigDecimal, lat2: BigDecimal, lon2: BigDecimal, radius: Double)Unit
main: (args: Array[String])Unit
MinLat: 34.6 minlon 40.9 maxlat: 34.7 maxlon: 41
java.lang.UnsupportedOperationException: empty collection
  at org.apache.spark.rdd.RDD$$anonfun$first$1.apply(RDD.scala:1370)
  at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
  at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
  at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
  at org.apache.spark.rdd.RDD.first(RDD.scala:1367)
  at org.neo4j.spark.Neo4j.loadDataFrame(Neo4j.scala:280)
  at doCalculation(<console>:114)
  at main(<console>:89)
  ... 81 elided
[43.4171031,37.5049815,43.4171031,37.5049815]

它作为空间查询来自bbox:

val query = "call blah blah yield node return node.fromDate as fromDate, node.bbox as bbox  ORDER BY node.toDateFormatLong DESC";
它不喜欢将return node.bbox作为bbox,我必须去掉它才能让查询工作

如果我这样做了,我会把数据帧拿回来。如果我没有,我会得到错误:

defined class DateLayerData
defined class ChangeScoreObj
changeScoreMap: java.util.Map[Integer,ChangeScoreObj] = {}
doCalculation: (lat1: BigDecimal, lon1: BigDecimal, lat2: BigDecimal, lon2: BigDecimal, radius: Double)Unit
main: (args: Array[String])Unit
MinLat: 34.6 minlon 40.9 maxlat: 34.7 maxlon: 41
java.lang.UnsupportedOperationException: empty collection
  at org.apache.spark.rdd.RDD$$anonfun$first$1.apply(RDD.scala:1370)
  at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
  at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
  at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
  at org.apache.spark.rdd.RDD.first(RDD.scala:1367)
  at org.neo4j.spark.Neo4j.loadDataFrame(Neo4j.scala:280)
  at doCalculation(<console>:114)
  at main(<console>:89)
  ... 81 elided
上面这一行是在一个循环中运行的。doCalculation函数的一部分,用不同的值反复调用

尝试加载从NEO4j返回的数据帧时,在NEO4j内部看起来如下所示:

-1  “Detected”  1   20161104    3318    37.5049815  43.4171031  20161023     “filename.val” 9.2 "23OCT16"   [43.4171031, 37.5049815, 43.4171031, 37.5049815]
因此,我进行查询调用以获取许多行中的一行,这些行与上面的行类似:

try {
 val initialDf2 = neo.cypher(query).loadDataFrame
 val someVal = initialDf2.collectAsList()
 val detectt = someVal.get(0).getString(1) //try to get the second field
 println(detectt)
} catch {
   case e: Exception => e.printStackTrace
}
我确实有一个try-catch,因为有时候发送给密码器的查询不会返回任何结果(我不知道如何处理)


我不知道这个错误,但是Scala/Spark给出了一些建议:首先,不要调用
collectAsList
然后调用
get(0)
,您可以使用
DataFrame.First()
,这对于较大的数据帧来说速度更快,也更安全。至于try-catch,处理可能为空值的一个好方法是使用
选项
,因此总共:
选项(initialDf2.first()).map(u.getString(1)).foreach(println)
将打印您想要的结果(如果为空,则不打印)。非常感谢,让我试试这个。Scala/Spark的建议我需要很多,我正在尝试并行化代码,我没有尽我所能编写最好的代码,也从来没有这样做过,所以这就像拔牙一样。出于某种原因抱怨println?编辑答案。哦,对不起,我的错
first()
为空数据帧抛出此异常,使用
initialDf2.take(1).headOption.map(uu.getString(1)).foreach(println)
好的尝试一下,这一切仍然包装在Option()中吗?不知道错误,但是一些Scala/Spark建议:首先,不要调用
collectAsList
,然后调用
get(0)
,您可以使用
DataFrame.first()
,这对于更大的数据帧来说速度更快,也更安全。至于try-catch,处理可能为空值的一个好方法是使用
选项
,因此总共:
选项(initialDf2.first()).map(u.getString(1)).foreach(println)
将打印您想要的结果(如果为空,则不打印)。非常感谢,让我试试这个。Scala/Spark的建议我需要很多,我正在尝试并行化代码,我没有尽我所能编写最好的代码,也从来没有这样做过,所以这就像拔牙一样。出于某种原因抱怨println?编辑答案。哦,对不起,我的错
first()
对空数据帧抛出此异常,请使用
initialDf2.take(1).headOption.map(u.getString(1)).foreach(println)
好的尝试此操作,是否仍将所有内容包装在Option()中?
  17/09/18 08:44:48 ERROR TaskSetManager: Task 0 in stage 298.0 failed 1 times; aborting job
    org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 298.0 failed 1 times, most recent failure: Lost task 0.0 in stage 298.0 (TID 298, localhost, executor driver): java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException: java.util.Collections$UnmodifiableRandomAccessList is not a valid external type for schema of string
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 0, altitude), DoubleType) AS altitude#1678
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 1, detect_type), StringType), true) AS detect_type#1679
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 2, gtype), LongType) AS gtype#1680L
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 3, toDateFormatLong), LongType) AS toDateFormatLong#1681L
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 4, change_area), LongType) AS change_area#1682L
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 5, latitude), DoubleType) AS latitude#1683
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 6, longitude), DoubleType) AS longitude#1684
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 7, fromDateFormatLong), LongType) AS fromDateFormatLong#1685L
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 8, iids), StringType), true) AS iids#1686
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 9, detect_strength), DoubleType) AS detect_strength#1687
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 10, fromDate), StringType), true) AS fromDate#1688
    if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 11, bbox), StringType), true) AS bbox#1689
        at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.toRow(ExpressionEncoder.scala:290)
        at org.apache.spark.sql.SparkSession$$anonfun$3.apply(SparkSession.scala:573)