user_artist__data数据记录用户播放某首歌曲的次数,数据包含3个字段,分别为useid(用户ID)、artistid(艺术家ID)、playcount(播放次数)更新一下子

user_artist__data数据记录用户播放某首歌曲的次数,数据包含3个字段,分别为useid(用户ID)、artistid(艺术家ID)、playcount(播放次数)。

ae68c16ae48d59125cfc8701b62abad4.gif

user_artist_data.txt

拿到数据用excel拆分,数据分列

笑死,数据分开第三行居然不是数值型

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95LqG77yMYXA=,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95LqG77yMYXA=,size_20,color_FFFFFF,t_70,g_se,x_16

 数据改好了,可以这样试试

package thisterm;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class homework_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SparkSession spark = SparkSession.builder().master("local").appName("Java Spark SQL basic example").config("spark.testing.memory","2147480000").getOrCreate();
		Dataset<Row> df = spark.read().format("csv").option("header", "true").load("file:///home/gyq/eclipse-workspace/user_artist_data.csv");
		//df.show();
		df.createOrReplaceTempView("UAD");
	
		//1)统计非重复的用户个数。
		//spark.sql("select count(distinct userid) as usernumber from UAD ").show();
		
		//统计用户听过的歌曲总数。
		//spark.sql("select userid,count(playcount) as playcount from UAD group by userid").show();
		
		
//		找出ID为“1000002”的用户最喜欢的10首歌曲(即播放次数最多的10首歌曲)。
		spark.sql("select * from UAD where userid='1000002' order by playcount desc limit 20").show();
		spark.stop();
	}

}

或者不改数据,直接用构造类

方法二

使用SparkSQL对该数据进行探索分析。

(1)统计非重复的用户个数。

(2)统计用户听过的歌曲总数。

(3)找出ID为“1000002”的用户最喜欢的10首歌曲(即播放次数最多的10首歌曲)。

package thisterm;

import java.io.Serializable;

import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class addtableheader {
	public static class Person implements Serializable {
	    private String userid;
	    private String artistid;
	    private int playcount;
	    
	    public String getUserid() {return userid;  }
	    public void setUserid(String userid) {  this.userid = userid; }
	    
	    public String getArtistid() {return artistid;}
	    public void setArtistid(String artistid) {this.artistid = artistid;} 
	    
	    public int getPlaycount() {return playcount;}
	    public void setPlaycount(int playcount) {this.playcount = playcount;}
	    
	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SparkSession spark = SparkSession.builder().master("local").appName("Java Spark SQL basic example").config("spark.testing.memory","2147480000").getOrCreate();
		JavaRDD<String> stringRDD = spark.read()
			      .textFile("/home/gyq/eclipse-workspace/user_artist_data.csv")
			      .javaRDD();
		JavaRDD<Person> peopleRDD = stringRDD.map(line -> {
	        String[] parts = line.split(" ");
	        Person person = new Person();
	        person.setUserid(parts[0]);
	        person.setArtistid(parts[1]);
	        person.setPlaycount(Integer.parseInt(parts[2]));
	        return person;
	      });
		Dataset<Row> peopleDF = spark.createDataFrame(peopleRDD, Person.class);
		//peopleDF.show();
		peopleDF.createOrReplaceTempView("UAD");
		//1)统计非重复的用户个数。
				spark.sql("select count(distinct userid) as usernumber from UAD ").show();
				
		
		//统计用户听过的歌曲总数。
				//spark.sql("select userid,count(playcount) as playcount from UAD group by userid").show();
			
//		找出ID为“1000002”的用户最喜欢的10首歌曲(即播放次数最多的10首歌曲)。
		
		//spark.sql("select * from UAD where userid='1000002' order by playcount desc limit 10").show();
		}

}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95LqG77yMYXA=,size_10,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95LqG77yMYXA=,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95LqG77yMYXA=,size_17,color_FFFFFF,t_70,g_se,x_16

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚与蓝莓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值