我正在尝试编写一个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
}