将String列转换为二进制列时出错

时间:2019-01-17 18:00:20

标签: scala apache-spark-sql

我正在尝试编写一个udf来将十六进制字符串(其中需要删除连字符)转换为二进制类型。这是我所拥有的:

  val df3 = 
    finalDf2.withColumn("vesselId2", vesselIdToByteArrayUdf(finalDf2.col("vesselId")))

  private val vesselIdToByteArray = (vesselId: String) => {
    val newString: String = vesselId.replaceAll("\\-","")
    val number: Long = Long2long(java.lang.Long.valueOf(newString, 16))

    BigInt(number).toByteArray
  }

  private val vesselIdToByteArrayUdf = udf(vesselIdToByteArray)

这不起作用。请注意,我并不是说将String转换为Long的中间步骤是正确的。实际上,我知道事实并非如此。我只是想通过任何可行的方式将String列转换为二进制列。

================================

我想我无法回答这个问题,因为它可能是重复的。无论如何,这是我找到的解决方案:

  private val vesselIdToByteArray = (vesselId: String) => {
    val newString: String = vesselId.replaceAll("\\-","")
    val number: BigInt = math.BigInt(newString, 16)

    number.toByteArray
  }

0 个答案:

没有答案