Вывод записи Spark как фиксированная ширина - PullRequest
0 голосов
/ 30 ноября 2018

Чтение файла фиксированной ширины в Spark легко, и для этого есть несколько способов.Однако я не смог найти способ ЗАПИСАТЬ вывод фиксированной ширины из свечи (2.3.1).Поможет ли преобразование DF в RDD?В настоящее время используется Pyspark, но любой язык приветствуется.Может кто-нибудь предложить выход?

1 Ответ

0 голосов
/ 30 ноября 2018

Вот пример того, что я описал в комментариях .

. Вы можете использовать pyspark.sql.functions.format_string(), чтобы отформатировать каждый столбец с фиксированной шириной, а затем использоватьpyspark.sql.functions.concat(), чтобы объединить их все в одну строку.

Например, предположим, что у вас был следующий DataFrame:

data = [
    (1, "one", "2016-01-01"),
    (2, "two", "2016-02-01"),
    (3, "three", "2016-03-01")
]

df = spark.createDataFrame(data, ["id", "value", "date"])
df.show()
#+---+-----+----------+
#| id|value|      date|
#+---+-----+----------+
#|  1|  one|2016-01-01|
#|  2|  two|2016-02-01|
#|  3|three|2016-03-01|
#+---+-----+----------+

Допустим, вы хотите выписатьВыравнивание по левому краю с фиксированной шириной 10

from pyspark.sql.functions import concat, format_string

fixed_width = 10
ljust = r"%-{width}s".format(width=fixed_width)

df.select(
    concat(*[format_string(ljust,c) for c in df.columns]).alias("fixedWidth")
).show(truncate=False)
#+------------------------------+
#|fixedWidth                    |
#+------------------------------+
#|1         one       2016-01-01|
#|2         two       2016-02-01|
#|3         three     2016-03-01|
#+------------------------------+

Здесь мы используем форматирование printf для %-10s, чтобы задать выравнивание по левому краю 10.

Если вместо этого выхотел выровнять строки по правому краю, убрав отрицательный знак:

rjust = r"%{width}s".format(width=fixed_width)

df.select(
    concat(*[format_string(rjust,c) for c in df.columns]).alias("fixedWidth")
).show(truncate=False)
#+------------------------------+
#|fixedWidth                    |
#+------------------------------+
#|         1       one2016-01-01|
#|         2       two2016-02-01|
#|         3     three2016-03-01|
#+------------------------------+

Теперь вы можете записать только выходной столбец fixedWidth в ваш выходной файл.

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