Databricks群集未初始化带有错误的Azure库:模块“ lib”没有属性“ SSL_ST_INIT”

时间:2019-03-04 13:23:48

标签: python azure pyspark openssl databricks

我正在将Azure DataBricks笔记本与Azure库一起使用,以获取Blob存储中的文件列表。该任务已安排好,完成工作后将终止集群,并以新的运行再次开始。

我正在使用Azure 4.0.0库(https://pypi.org/project/azure/

有时我会收到错误消息:

  • AttributeError:模块“ lib”没有属性“ SSL_ST_INIT”

而且很少:

  • AttributeError:cffi库'_openssl'没有函数,常量或 名为“ CRYPTOGRAPHY_PACKAGE_VERSION”的全局变量

我找到了一种解决方案,例如卸载openssl或azure库,重新启动群集并重新安装,但是由于可能需要处理更长的任务等,因此可能无法重新启动群集。

我还尝试在初始化脚本中安装/升级openSSL 16.2.0,但它无济于事,并开始与默认情况下位于Databricks集群中的另一个openSSL库发生冲突

有什么我可以做的选择吗?

有用于从Blob存储获取文件列表的代码:

import pandas as pd
import re
import os
from pyspark.sql.types import *
import azure
from azure.storage.blob import BlockBlobService
import datetime
import time

r = []
marker = None
blobService = BlockBlobService(accountName,accountKey)
while True:
  result = blobService.list_blobs(sourceStorageContainer, prefix = inputFolder, marker=marker)
  for b in result.items:
    r.append(b.name)
  if result.next_marker:
    marker = result.next_marker
  else:
    break
print(r)

谢谢

3 个答案:

答案 0 :(得分:1)

此问题的解决方案是将Azure库降级为3.0.0。

Azure v4似乎与Databricks中的某些初始库有冲突。

答案 1 :(得分:0)

此问题也与pyOpenSSL软件包都有链接。降级到18.0.0版对我有用。我在群集初始化

时将以下脚本用作初始化脚本
first_name = request.GET.get('first_name')
last_name = request.GET.get('last_name')

if first_name:
   user_obj = User.objects.filter(role_id=USER_ROLE['employer'], first_name=first_name)
if last_name:
   user_obj = User.objects.filter(role_id=USER_ROLE['employer'], last_name=last_name)

答案 2 :(得分:0)

运行6或更高版本的databricks现在应该可以解决此问题。