Извлеките конкретное значение словаря из DataFrame в Pyspark, имеющем нечувствительные атрибуты случаяPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Извлеките конкретное значение словаря из DataFrame в Pyspark, имеющем нечувствительные атрибуты случая

Сообщение Anonymous »

У меня есть ниже DataFrame < /p>

Код: Выделить всё

dataDictionary = [('value1', [{'key': 'Fruit', 'value': 'Apple'}, {'key': 'Colour', 'value': 'White'}]),
('value2', [{'key': 'Fruit', 'value': 'Mango'}, {'key': 'Bird', 'value': 'Eagle'}, {'key': 'Colour', 'value': 'Black'}]),
('value3', [{'key': 'Fruit', 'value': 'Apple'}, {'key': 'colour', 'value': 'Blue'}])]

df = spark.createDataFrame(data=dataDictionary)
df.printSchema()
df.show(truncate=False)
< /code>
+------+------------------------------------------------------------------------------------------------+
|_1    |_2                                                                                              |
+------+------------------------------------------------------------------------------------------------+
|value1|[{value -> Apple, key -> Fruit}, {value -> White, key -> Colour}]                               |
|value2|[{value -> Mango, key -> Fruit}, {value -> Eagle, key -> Bird}, {value -> Black, key -> Colour}]|
|value3|[{value -> Apple, key -> Fruit}, {value -> Blue, key -> colour}]
+------+------------------------------------------------------------------------------------------------+
< /code>
I wanted to extract only the values of key -> Colour and I'm using below to get the exact result
from pyspark.sql import SparkSession, functions as F

...
df = df.select('_1', F.filter('_2', lambda x: x['key'] == 'Colour')[0]['value'])
< /code>
result,
_1       _2
value1   White
value2   Black
value3
< /code>
But for value3, there is no result because key is in lower case colour
, для ключа Value1 и vaue2 находится в Camel Case Color , который работает с функцией Lambda f.filter ('_ 2', lambda x: x ['key'] == 'color') [0] ['value'] . Я попытался использовать верхний, чтобы справиться со всеми тремя сценариями, но это не работает. < /P>

Код: Выделить всё

F.filter('_2', lambda x: x['key'].upper() == 'COLOUR')[0]['value']

Любое предложение будет оценено.

Подробнее здесь: https://stackoverflow.com/questions/795 ... e-insensit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»