Nano Hash - криптовалюты, майнинг, программирование

Измените разделитель в параметре saveAsTextFile в Pyspark rdd

У меня есть набор данных, доступный в HDFS. Я читаю его и выполняю операцию фильтрации.

dir = sc.textFile('/datasets/DelayedFlights.csv').filter(lambda x: 
int(x.split(',')[24]) == 1).map(lambda y: y.split(','))
The output of above operation is
[u'1763', u'2008', u'1', u'3', u'4', u'922.0', u'915', u'', u'1050', u'WN', 
u'1069', u'N630WN', u'', u'95.0', u'', u'', u'7.0', u'SAN', u'SMF', u'480', 
u'', u'12.0', u'0', u'N', u'1', u'', u'', u'', u'', u'']
[u'1911', u'2008', u'1', u'3', u'4', u'2325.0', u'1900', u'', u'2030', 
u'WN', u'2092', u'N302SW', u'', u'90.0', u'', u'', u'265.0', u'SFO', u'SAN', 
u'447', u'', u'11.0', u'0', u'N', u'1', u'', u'', u'', u'', u'']
[u'2651', u'2008', u'1', u'4', u'5', u'1949.0', u'1905', u'', u'1910', 
u'WN', u'1403', u'N504SW', u'', u'65.0', u'', u'', u'44.0', u'BOI', u'RNO', 
u'335', u'', u'11.0', u'0', u'N', u'1', u'', u'', u'', u'', u'']

Я хочу изменить сохранение вышеуказанного файла на путь HDFS, используя saveAsTextFile с разделителем табуляции. Может ли кто-нибудь сказать мне, как изменить разделитель с запятой на табуляцию в python


Ответы:


1

Один из способов добиться этого — преобразовать RDD в фрейм данных и сохранить фрейм данных в формате csv с параметром разделителя, установленным на вкладку, как показано ниже.

rdd = spark.sparkContext.parallelize([['1763', '2008', '1', '3', '4', '922.0'], ['1763', '2008', '1', '3', '4', '922.0'], ['1763', '2008', '1', '3', '4', '922.0']])
df = spark.createDataFrame(rdd.map(lambda x: tuple(x)))
df.write.format('com.databricks.spark.csv').option("delimiter", '\t').save('/path/to/csv/file/')

Если вы не хотите преобразовывать свой rdd в dataframe, следуйте приведенному ниже фрагменту.

rdd.map(lambda x: '\t'.join(x)).saveAsTextFile('test_dir/output')

Подход DataFrame рекомендуется по сравнению с вышеуказанным подходом.

04.06.2017
  • можете ли вы сказать мне, почему вы использовали кортеж (x) для создания фрейма данных, а не createDataFrame (rdd, схема) 04.06.2017
  • это потому, что каждый элемент кортежа будет рассматриваться как отдельный столбец. например, для [('a1', 'b1', 'c1'), ('a2', 'b2', 'c2'), ('a3', 'b3', 'c3')] это создаст DataFrame из 3 столбцов. 04.06.2017
  • Я получаю эту ошибку TypeError: объект DataFrameWriter не вызывается 04.06.2017
  • какая версия вашего спарка? 04.06.2017
  • я использую искру 1.6.1 05.06.2017
  • убедитесь, что вы включили этот пакет (github.com/databricks/spark-csv) или обновитесь до искра 2.x 05.06.2017
  • @hadooppractice, почему вы используете Spark 1.6.1? 05.06.2017
  • @AKSW Мой экземпляр HDP поставляется со искрой 1.6.1 05.06.2017
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..