Преобразование структуры pyspark в строку с помощью pyspark - PullRequest
0 голосов
/ 17 июня 2020

У меня есть столбец структуры в фрейме данных pyspark, который произошел из словаря. Я хотел бы преобразовать это в строку вида «ключ1 значение1 ключ2 значение2 ...», где ключи, например, расположены в алфавитном порядке. Я думаю, что udf - это то, что мне нужно, так как мне нужна некоторая гибкость, но пока я в тупике. Искра df, созданная из pandas df, как в приведенном ниже примере, нормально работает с этим методом, но для фактического df, который у меня есть, метод, похоже, теряет ключи словаря. Я понимаю, что это не воспроизводимый пример, но надеюсь, что кто-то видел такое поведение раньше и может взвесить его. Искра df происходит из документа json в случае, если это помогает. Кажется, что udf видит структуру pyspark как список значений, а не словарь с парами ключ: значение.

from pyspark.sql.functions import udf
from pyspark.sql.types import LongType,StringType

values = [({'a':1,'b':2},{'a':3,'b':4}),(5,6)]
columns = ['dict_col', 'n']
pdf = pd.DataFrame({'a':[{'c':1,'d':2}],'b':[3]})
tdf = spark.createDataFrame(pdf)

def dict_to_str(d):
  #  return ' '.join([str(f) for f in d])  # loses the keys, concats the values
  return ' '.join([k+' '+v for k,v in d.items()])  # gives ValueError: 'items' is not in list for my actual df

spark.udf.register("dict_to_str_name", dict_to_str)
dict_to_str_udf = udf(dict_to_str, StringType())

test = tdf.select("a", dict_to_str_udf("a").alias("test_out"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...