首先在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|
//+---+-----+
}
}
本文章只是作为巩固,如有不对,还请提议!!!!