我正在尝试使用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解压缩时,它会失败。
有人知道我怎么做吗?
答案 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)