创建一个Spark udf函数来迭代一个字节数组并将其转换为数字-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

创建一个Spark udf函数来迭代一个字节数组并将其转换为数字

社区小助手 2018-12-05 14:55:07 1363

我有一个带有spark(python)字节数组的Dataframe

DF.select(DF.myfield).show(1, False)
+----------------+

myfield
[00 8F 2B 9C 80]

我正在尝试将此数组转换为字符串

'008F2B9C80'
然后到数值

int('008F2B9C80',16)/1000000

2402.0
我找到了一些udf样本,所以我已经可以像这样提取数组的一部分了:

u = f.udf(lambda a: format(a[1],'x'))
DF.select(u(DF['myfield'])).show()
+------------------+

(myfield)
8f

现在如何迭代整个数组?是否可以执行我必须在udf函数中编码的所有操作?

分布式计算 Spark Python
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:18:24

    这是scala df解决方案。您需要导入scala.math.BigInteger

    scala> val df = Seq((Array("00","8F","2B","9C","80"))).toDF("id")
    df: org.apache.spark.sql.DataFrame = [id: array]

    scala> df.withColumn("idstr",concat_ws("",'id)).show
    id idstr
    [00, 8F, 2B, 9C, 80] 008F2B9C80

    scala> import scala.math.BigInt
    import scala.math.BigInt

    scala> def convertBig(x:String):String = BigInt(x.sliding(2,2).map( x=> Integer.parseInt(x,16)).map(_.toByte).toArray).toString
    convertBig: (x: String)String

    scala> val udf_convertBig = udf( convertBig(_:String):String )
    udf_convertBig: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(,StringType,Some(List(StringType)))

    scala> df.withColumn("idstr",concat_ws("",'id)).withColumn("idBig",udf_convertBig('idstr)).show(false)
    id idstr idBig
    [00, 8F, 2B, 9C, 80] 008F2B9C80 2402000000

    scala>
    scala的BigInteger没有等效的spark,所以我将udf()结果转换为字符串。

    0 0
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题