如何在dsx ml管道中处理非标准分隔的输入文件?

时间:2017-02-21 07:53:35

标签: data-science-experience

我正在尝试使用没有标题的数据集,并且字段分隔符有::

! 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 ml管道功能让dsx重新整形此文件,那么dsx在输入文件格式方面是否有任何预先要求?

更新

我正在尝试使用的ml管道功能可以从下面的屏幕截图中看到:

enter image description here

我添加了一个数据集,但无法弄清楚如何让dsx识别字段分隔符:

enter image description here

1 个答案:

答案 0 :(得分:2)

截至2017年2月......

当您创建新管道并选择数据集时,我相信DSX会使用Spark DataFrameReader加载您选择的文件。 DataFrameReader默认使用单个,作为分隔符。 DSX没有提供更改UI中默认分隔符的方法。

我认为预处理数据是您的最佳选择。你可以在笔记本上做到这一点。请注意,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能够正确解析的格式。