在Azure Databricks-Python

时间:2019-05-06 20:45:59

标签: python pyspark binary azure-eventhub azure-databricks

我正在尝试使用Azure DataBricks和python(PySpark)读取Azure EventHub GZIP压缩消息,但是使用UDF不适用于BinaryType数据。

好吧,这是我检查身体中什么的部分

df = eventHubStream.withColumn("body", eventHubStream["body"]).select("body")
display(df, truncate=False)

这将显示压缩良好的数据,如下所示:H4sIAKeM0FwC/3VS22rbQBB9z1cIQ6ElWN37JW8baeMKZEmRNk4LhcXUppg2cYncy...

但是,当我尝试将数据发送到UDF时,它的行为与预期的不一样。该函数实际上不执行任何操作,但是输出看起来像已经转换了:

import zlib
from pyspark.sql.types import StringType

def streamDecompress(val: BinaryType()):
  #return zlib.decompress(val)
  return val

func_udf = udf(lambda x: streamDecompress(x), StringType())

df = eventHubStream.withColumn("body", func_udf(eventHubStream["body"])).select("body")
display(df, truncate=False)

以下是输出:

[B@49d3f786

因此,正如预期的那样,当我尝试使用zlib解压缩时,它会失败。

有人知道我怎么做吗?

1 个答案:

答案 0 :(得分:0)

嗯,那比我想的要简单。我基本上是在尝试显示类似字节的数据哈哈。

下面的代码解决了这个问题:

import zlib

def streamDecompress(val):   
  return str(zlib.decompress(val, 15+32))

func_udf = udf(lambda x: streamDecompress(x))

df = eventHubStream.withColumn("body", func_udf(eventHubStream["body"])).select('body')

display(df, truncate=False)