2017-02-21 7 views
1

Я пытаюсь работать с набором данных, который не имеет заголовка и имеет :: для полевого delimmiters:Как обрабатывать входной файл с нестандартным делимитированием в конвейере dsx ml?

! wget --quiet http://files.grouplens.org/datasets/movielens/ml-1m.zip 
! unzip ml-1m.zip 
! mv ml-1m/ratings.dat . 
! head ratings.dat 

Выход:

1::1193::5::978300760 
1::661::3::978302109 
1::914::3::978301968 

Я загрузил файл в мой DSX трубопровод, но я не понимаю, как получить dsx для разделения этого файла с помощью ограничителей ::. Q1) как это сделать?

Q2) Если невозможно получить dsx для изменения этого файла с использованием функциональности dsx ml, имеет ли dsx какие-либо предпосылки с точки зрения формата входного файла?


Update:

Функциональность мл трубопровода Я пытаюсь использовать можно видеть на скриншоте ниже:

enter image description here

я добавил набор данных, но не могут понять, как получить dsx для распознавания полевых делителей:

enter image description here

+0

DSX предоставляет кучу API-интерфейсов. Не могли бы вы более конкретно узнать, какой из них вы хотите использовать для обработки файла? Я предполагаю, что вы используете ноутбуки здесь, а не R Studio. Но хотите ли вы работать с Python, R или Scala? Было бы приемлемым прочитать файл в памяти с помощью функции Python lib или Scala и подавать его туда в ML-трубопровод? Было бы приемлемо, в крайнем случае, преобразовать формат файла с некоторыми командами bash из ноутбука Python, а затем обработать преобразованный файл? –

+0

Я обновил вопрос с дополнительной информацией. Я ожидал увидеть функциональность в конвейере ui, чтобы помочь с этой предварительной обработкой, возможно, это недоразумение с моей стороны. Я также работал в предположении, что вы работаете с ноутбуками * или * конвейерами, но не с обоими. Если мне нужно работать как в ноутбуке, так и в трубопроводе, я бы, наверное, все сделал в ноутбуке? Если нам нужно обработать данные перед загрузкой в ​​конвейер, в какой формат мы должны преобразовать его? –

ответ

2

С февраля-2017 ...

При создании нового трубопровода и выбрать набор данных, я считаю DSX загружает выбранный файл с помощью искрового DataFrameReader. DataFrameReader по умолчанию использует один , в качестве разделителя. DSX не дает возможности изменить разделитель по умолчанию в пользовательском интерфейсе.

Я думаю, что предварительная обработка данных - ваш лучший вариант. Вы можете сделать это в записной книжке. Имейте в виду, что Spark DataFrameReader поддерживает только один разделитель символов, поэтому вы не можете использовать его с данным конкретным набором данных. Однако вы можете использовать pandas.

import pandas as pd 

pdf = pd.read_csv('ml-1m/ratings.dat', sep='::', 
       header=None, 
       names=['UserID','MovieID','Rating','Timestamp'], 
       engine='python') 

pdf.to_csv('ratings.csv', index=False) 

!head ratings.csv 
UserID,MovieID,Rating,Timestamp 
1,1193,5,978300760 
1,661,3,978302109 
1,914,3,978301968 
1,3408,4,978300275 
1,2355,5,978824291 
1,1197,3,978302268 
1,1287,5,978302039 
1,2804,5,978300719 
1,594,4,978302268 

Теперь данные будут в формате, который DSX сможет правильно проанализировать.