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

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

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

45.1.gif

user_artist_data.txt

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

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

45.2.png

45.3.png

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

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();
  }
}

相关文章
|
3月前
|
SQL 算法 Serverless
B端算法实践问题之使用concat_id算子获取用户最近点击的50个商品ID如何解决
B端算法实践问题之使用concat_id算子获取用户最近点击的50个商品ID如何解决
28 1
|
4月前
|
关系型数据库 MySQL 数据库
mysql,归零,无法自动排序,删除id,表单的数据没有从零开始出现怎样解决?删除数据仍然从删除的地方该怎样解决?表单的数据没有从2开始,而是从之前的删除的序号开始自增。
mysql,归零,无法自动排序,删除id,表单的数据没有从零开始出现怎样解决?删除数据仍然从删除的地方该怎样解决?表单的数据没有从2开始,而是从之前的删除的序号开始自增。
|
4月前
|
NoSQL Java Redis
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
|
6月前
|
前端开发 JavaScript
empty来显示暂无数据简直太好用,阻止用户复制文本user-select
empty来显示暂无数据简直太好用,阻止用户复制文本user-select
|
11月前
|
数据库
mp查询出来时间自动去掉秒
mp查询出来时间自动去掉秒
80 0
|
存储 iOS开发
iOS小技能: get 和post 布尔值参数处理、按照时间分页的数据重复的处理
1. get 和post 布尔值参数处理:如果后台Bool 参数没有同时支持【 0,1】 ;和【 true false】,get请求的时候就需要特殊处理。 2. 按照时间分页的数据重复的处理
176 0
iOS小技能: get 和post 布尔值参数处理、按照时间分页的数据重复的处理
|
JSON 数据格式 开发者
PUT 和 POST-更新Ⅱ之局部更新|学习笔记
快速学习 PUT 和 POST-更新Ⅱ之局部更新。
133 0
|
JavaScript 开发者
添加新闻时增加一个 id 属性|学习笔记
快速学习添加新闻时增加一个 id 属性
添加新闻时增加一个 id 属性|学习笔记
|
SQL 关系型数据库 MySQL
十一、操作delete或者update语句,加个limit或者循环分批次删除
十一、操作delete或者update语句,加个limit或者循环分批次删除
314 0