SparkSQL(hadoop操作sparksql)

首先在IDEA写好SparkSQL如下:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext;

/**
 * 使用json数据源创建DataFrame
 */
public class DataFrameCreate {
    public static void main(String[] args) {

        SparkConf conf = new SparkConf()
                .setAppName("DataFrameCreate")
                .setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);
        DataFrame dataFrame = sqlContext.read().json("hdfs://192.168.72.110:9000/students.json");
        dataFrame.show();
    }
}

测试试试有没有语法错误,这是用Maven测试的(1)。然后再将项目打成jar包(2)如下:

在这里插入图片描述

将jar包上传到虚拟机,开启Hadoop集群(我这spark集群也开了),结果如下:
在这里插入图片描述

将执行的studens.json文件上传到hdfs中,如下:

[root@Tyler01 scala]# hadoop fs -put students.json 

然后在写一个启动脚本如下:
在这里插入图片描述
执行这个脚本:

[root@Tyler01 scala]# sh create.sh 

在这里插入图片描述
这样就执行完毕!!!

在操作的过程中出现了两次错误,不知道具体什么意思,就大概解决下

第一个问题,如下:
在这里插入图片描述

大概意思是找不到类,解决办法 : 首先可能是执行脚本的包写错了如下:
在这里插入图片描述
还有可能是Maven项目的pom文件有问题(需要重新创建Maven项目)。

第二个问题,如下:

在这里插入图片描述
解决办法 : 可能是maven项目的路径或文件名写错了。
在这里插入图片描述

上面的还可以用scala写如下:

import org.apache.spark.sql.{DataFrame, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}

object DataFrameCreate extends App {
  val conf = new SparkConf().setAppName("DataFrameCreate").setMaster("local")

  val sc = new SparkContext(conf)

  val sqlcontext: SQLContext = new SQLContext(sc)

  private val frame: DataFrame = sqlcontext.read.json("hdfs://192.168.72.110:9000/students.json")

  frame.show()

  //结果
  //+---+---+-----+
  //|age| id| name|
  //+---+---+-----+
  //| 18|  1|  leo|
  //| 19|  2| jack|
  //| 17|  3|marry|
  //+---+---+-----+

}

案例

java写

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext;

public class DataFrameOpration {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf()
                .setMaster("local")
                .setAppName("DataFrameOpration");

        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);
        DataFrame json = sqlContext.read().json("hdfs://192.168.72.110:9000/students.json");

        //打印所有数据
        json.show();
        //+---+---+-----+
        //|age| id| name|
        //+---+---+-----+
        //| 18|  1|  leo|
        //| 19|  2| jack|
        //| 17|  3|marry|
        //+---+---+-----+

        //打印DataFrame的元数据
        json.printSchema();
        //root
        // |-- age: long (nullable = true)
        // |-- id: long (nullable = true)
        // |-- name: string (nullable = true)

        //查询某列的所有数据
        json.select("name").show();

        //查询某几列的所有数据,并对列进行计算
        json.select(json.col("age"), json.col("age").plus(3)).show();
        //+---+---------+
        //|age|(age + 3)|
        //+---+---------+
        //| 18|       21|
        //| 19|       22|
        //| 17|       20|
        //+---+---------+

        //根据某一列值就行过滤
        json.filter(json.col("age").gt(18)).show();
        //+---+---+----+
        //|age| id|name|
        //+---+---+----+
        //| 19|  2|jack|
        //+---+---+----+

        //根据某一列进行分组,在聚合
        json.groupBy(json.col("age")).count().show();
    //+---+-----+
        //|age|count|
        //+---+-----+
        //| 17|    1|
        //| 18|    1|
        //| 19|    1|
        //+---+-----+
    }
}

scala写

import org.apache.spark.sql.{DataFrame, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}

object DataFrameOpration  {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("DataFrameOpration")
    val sc = new SparkContext(conf)

    val sQLContext = new SQLContext(sc)

    val dataFrame: DataFrame = sQLContext.read.json("hdfs://192.168.72.110:9000/students.json")

    //打印数据
    dataFrame.show()
    //结果
    //+---+---+-----+
    //|age| id| name|
    //+---+---+-----+
    //| 18|  1|  leo|
    //| 19|  2| jack|
    //| 17|  3|marry|
    //+---+---+-----+

    //打印元数据
    dataFrame.printSchema()
    //结果
    // root
    //    |-- age: long (nullable = true)
    //    |-- id: long (nullable = true)
    //    |-- name: string (nullable = true)


    //查询某列的数据
    dataFrame.select("name").show()
    //结果
    //+-----+
    //| name|
    //+-----+
    //|  leo|
    //| jack|
    //|marry|
    //+-----+

    //查询某列的数据并进行计算
    dataFrame.select(dataFrame.col("age"),dataFrame.col("age").plus(2)).show()
    //结果
    //+---+---------+
    //|age|(age + 2)|
    //+---+---------+
    //| 18|       20|
    //| 19|       21|
    //| 17|       19|
    //+---+---------+

    //查询某列值进行过滤
    dataFrame.filter(dataFrame.col("age" )<= 18 ).show()
    //结果
    //+---+---+-----+
    //|age| id| name|
    //+---+---+-----+
    //| 18|  1|  leo|
    //| 17|  3|marry|
    //+---+---+-----+

    //根据某一列分组,在聚合
    dataFrame.groupBy(dataFrame.col("age")).count().show()
    //结果
    //+---+-----+
    //|age|count|
    //+---+-----+
    //| 17|    1|
    //| 18|    1|
    //| 19|    1|
    //+---+-----+

  }
}

本文章只是作为巩固,如有不对,还请提议!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值