выберите столбцы и добавьте фиксированное пространство ширины между столбцами и сохраните в файле fixedWidth в Spark - PullRequest
0 голосов
/ 22 сентября 2018

Я хочу выбрать несколько столбцов из DF.

Между столбцами мне нужно добавить разные пробелы, так как конечный пользователь хочет файл фиксированной ширины (но не уверен насчет нескольких столбцов в будущем).Таким образом, между ними необходимо добавить некоторое пространство фиксированной ширины.Мне нужно сохранить этот файл как текстовый файл без заголовка как файл FixedWidth.

Моя строка вывода должна выглядеть примерно так:

aaa bbb ccc ddd

где aaa, bbb ...значения столбцов выбраны из DF и с 3 пробелами, добавленными между ними.

Может кто-нибудь помочь, пожалуйста, здесь

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Я думаю, что лучше работать с RDD, если вы сохраните вывод в виде текстового файла.Вот мое решение для pyspark

>>> data = sc.parallelize([
...     ('aaa','bbb','ccc','ddd'),
...     ('aaa','bbb','ccc','ddd'),
...     ('aaa','bbb','ccc','ddd')])
>>> columns = ['a','b','c','d']
>>> 
>>> df = spark.createDataFrame(data, columns)
>>> 
>>> df.show()
+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|aaa|bbb|ccc|ddd|
|aaa|bbb|ccc|ddd|
|aaa|bbb|ccc|ddd|
+---+---+---+---+

>>> 
>>> df.registerTempTable("table1")
>>> 
>>> table1 = spark.sql("select concat(a,'   ', b,'   ',c, '   ', d) col from table1")
>>> 
>>> table1.show()
+--------------------+
|                 col|
+--------------------+
|aaa   bbb   ccc  ...|
|aaa   bbb   ccc  ...|
|aaa   bbb   ccc  ...|
+--------------------+

>>> 
>>> rdd = table1.rdd.map(lambda x: "".join([str(i) for i in x]))
>>> 
>>> rdd.collect()
['aaa   bbb   ccc   ddd', 'aaa   bbb   ccc   ddd', 'aaa   bbb   ccc   ddd']
>>> 
>>> rdd.saveAsTextFile("/yourpath")
0 голосов
/ 22 сентября 2018

Это pyspark В pyspark, как вы добавляете / объединяете строку в столбец?

Но в Scala это почти то же самое:

df.select(concat(col("firstColumn"), lit(" "), col("secondColumn"), lit(" "), col("thirdColumn"))).show()

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