0

我们有 SQL Server 2016,其中有一varbinary列包含压缩的 XML。现在我们想通过解压缩将数据加载到 cdp hive (Hive 3.1.3000) 表中。

最初我们使用 java 实用程序来解压缩和膨胀数据,但现在我们正在寻找一些替代方法,如 pyspark。

我们使用下面的 java 代码来膨胀数据:

if( colType == java.sql.Types.VARBINARY ) {
msg = "Processing VARBINARY " + colLabel;
// logger.info("Checking VARBINARY column: " + colLabel);
if( inflateColumnList.contains(colLabel) ) {
ByteArrayInputStream bais = new ByteArrayInputStream( rs.getBytes( colIndex ));
Inflater inflater = new Inflater(true);
InflaterInputStream iis = new InflaterInputStream(bais, inflater); 
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
while(iis.available() != 0){
buffer.write(iis.read());
}
iis.close();
result = new String(buffer.toByteArray(), "UTF-8" );
}
else {
logger.info(" VARBINARY column: " + colLabel + " is NOT in the unzip list");
result = Base64.getEncoder().encodeToString(rs.getBytes(colIndex) );
}

我现在可以从数据帧中获取字节数组,如下所示:

在此处输入图像描述

bytearrayobj = df.select(F.collect_list('itemdetailsdata')).first()[0][0]
print(zlib.decompress(bytes.decode(bytearrayobj,'utf-8')))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor 'decode' requires a 'str' object but received a 'bytearray'

请指导我如何从这个字节数组生成解压缩的 XML。

4

0 回答 0