如何在数据集中生成值

sshcrbum  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(401)

我将数据集保存在以下格式的文本文件中:

user ID   Song ID   Rating
0         7171      5
0         8637      4
0         21966     4
0         35821     5

(它们之间没有破折号,只有一个制表符)
我有大约一百万张这样的唱片。我需要生成第四个具有流派id的记录。我将此流派id保存在另一个文本文件中,格式如下:

Song ID   Album ID   Artist ID  Genre ID
4         243        2282       0
5         7783       3832       0
6         11704      1655       106
7         10126      6328       114
8         10672      4121       0

如何为数据集中相应的“歌曲id”生成“流派id”。你能建议一个最简单的方法来生成第四列吗。

gg0vcinb

gg0vcinb1#

@andersfinn:他使用的是mysql,它不支持 SELECT ....INTO (甲骨文)

INSERT INTO newTable
 SELECT tb1.userID, tb1.SongID, tb1.Rating, tb2.GenreID
 FROM tab1
 LEFT JOIN tab2
 ON tab1.SongID = tab2.SongID

我本想加上它作为评论,但我还是做不到。

ctzwtxfj

ctzwtxfj2#

创建包含所有四列的新表:

CREATE TABLE newTable
( 
  userid int,
  SongID int,
  Rating int,
  GenreID int
)

填充它:

SELECT tb1.userID, tb1.SongID, tb1.Rating, tb2.GenreID
INTO newTable
FROM tab1
LEFT JOIN tab2
ON tab1.SongID = tab2.SongID

下面说的语法不适用于mysql,只适用于oracle。fra-mysql的语法如下:http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
在这种情况下,结果将是:

INSERT INTO newTable (userID, SongID, Rating, GenreID)
SELECT tb1.userID, tb1.SongID, tb1.Rating, tb2.GenreID
FROM tab1
LEFT JOIN tab2
ON tab1.SongID = tab2.SongID

如果有数百万条记录,最好在tab1和tab2上的songid上创建一个索引。

相关问题