我们有 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。