代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

orientdb:java.lang.illegalargumentException属性值不能为空

  •  1
  • ScalaBoy  · 技术社区  · 6 年前

    我正在将带有图形边缘的数据帧保存在OrientDB数据库中。 但是,我得到以下错误:

    FAILED, exitCode: 15, (reason: User class threw exception: java.lang.RuntimeException: An exception was thrown: Job aborted due to stage failure: Task 0 in stage 96.0 failed 4 times, most recent failure: Lost task 0.3 in stage 96.0 (TID 7333, myambarislave2.local.test.org, executor 1): java.lang.IllegalArgumentException: Property value can not be null
    

    我不能手动修改数据框架,因为它很大。但是我用 .na.fill(0) .

    df_edges
      .na.fill(0)
      .coalesce(1)
      .write
      .format("org.apache.spark.orientdb.graphs")
      .option("dburl", uri)
      .option("user", username)
      .option("password", password)
      .option("vertextype", "User")
      .option("edgetype", "UserEdge")
      .mode(SaveMode.Overwrite)
      .save()
    

    我如何解决这个问题?

    用户类:

    val user: OrientVertexType = graph.createVertexType("User")
    user.createProperty("CommunityId", OType.INTEGER)
    user.createProperty("CommunityName", OType.STRING)
    user.createProperty("UserId", OType.INTEGER)
    user.createProperty("UserName", OType.STRING)
    user.createProperty("NumberOfInfluencedUsers", OType.INTEGER)
    user.createProperty("AuthorEngagementRate", OType.DOUBLE)
    user.createProperty("Role_In", OType.STRING)
    user.createProperty("Role_Out", OType.STRING)
    user.createProperty("OutDegree", OType.INTEGER)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Shaido MadHadders    6 年前

    这里的问题是由于并非所有列都是数字。更具体地说,具有空值的列不是数字。使用时 na.fill(0) spark将仅用与0匹配的类型(即所有数值列)替换列中的空值。

    要替换字符串列中的空值,最简单的方法是使用 na.fill("0") 并将“0”替换为要替换的内容。否则,可以使用 na.drop() .


    如果要根据列填充不同的值,可以使用 Map .这还有一个好处,即能够为不同类型的列设置不同的值。例如:

    df.na.fill(Map(
      "A" -> "Undefined",
      "B" -> 0.0
    ))
    

    若要更进一步,可以自动创建 地图 取决于列类型:

    val typeMap = df.dtypes.map(col => 
      col._2 match {
        case "IntegerType" => (col._1 -> 0)
        case "StringType" => (col._1 -> "Undefined")
        case "DoubleType" => (col._1 -> 0.0)
    }).toMap