pyspark read csv net.razorvine.pickle столбец - PullRequest
0 голосов
/ 30 ноября 2018

Я читаю df для запуска и собираюсь применить функцию для извлечения данных из столбца, который содержит list из dicts.

Когда я читаю файл и печатаю ихтипа, я получаю следующее.

dfCredits = spark.read.option("header","true").option("delimiter",";").csv(folder+'credits.csv',inferSchema =True).drop('_c0')
print(dfCredits.dtypes)
#[('cast', 'string'), ('crew', 'string'), ('id', 'string')]

Вот dfCredits:

+--------------------+--------------------+-----+
|                cast|                crew|   id|
+--------------------+--------------------+-----+
|[{'cast_id': 14, ...|"[{'credit_id': '...|  862|
|[{'cast_id': 1, '...|[{'credit_id': '5...| 8844|
|[{'cast_id': 2, '...|[{'credit_id': '5...|15602|
|"[{'cast_id': 1, ...|[{'credit_id': '5...|31357|
|[{'cast_id': 1, '...|[{'credit_id': '5...|11862|
|"[{'cast_id': 25,...|"[{'credit_id': '...|  949|
|[{'cast_id': 1, '...|[{'credit_id': '5...|11860|
|[{'cast_id': 2, '...|[{'credit_id': '5...|45325|
|[{'cast_id': 1, '...|[{'credit_id': '5...| 9091|
|[{'cast_id': 1, '...|[{'credit_id': '5...|  710|
|"[{'cast_id': 1, ...|[{'credit_id': '5...| 9087|

Вот функция, которую я хочу применить:

def getDirector(x):
    if type(x) == str:
        x = eval(x)
    for crew in x:
        if crew.get('job') == 'Director':
            return crew.get('name')
    return None

Затем я создаюudf

getDirUDF = udf(lambda x: getDirector(x),StringType())

и применить функцию.

dfCredits.select('id','cast',getDirUDF('cast').alias('director'))

Я получаю следующую ошибку:

AttributeError: 'str' object has no attribute 'get'

Казалось, что это из-за попыткиоднако, если я добавляю исключение, все они попадают в исключение.

Кроме того, когда я пытаюсь проверить тип отдельных элементов столбцаЯ получаю следующее:

getDirUDF = udf(lambda x: type(x))
dfCredits.select('id','cast',getDirUDF('cast').alias('typeCast'))
+-----+--------------------+--------------------+
|   id|                cast|            typeCast|
+-----+--------------------+--------------------+
|  862|[{'cast_id': 14, ...|net.razorvine.pic...|
| 8844|[{'cast_id': 1, '...|net.razorvine.pic...|
|15602|[{'cast_id': 2, '...|net.razorvine.pic...|
|31357|"[{'cast_id': 1, ...|net.razorvine.pic...|
|11862|[{'cast_id': 1, '...|net.razorvine.pic...|
|  949|"[{'cast_id': 25,...|net.razorvine.pic...|

Мне интересно, что такое net.razorvine.pickle.objects.classdictconstructor (полное имя) и как я могу этим манипулировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...