SparkSQL创建RDD:创建DataFrame的方式,配置Spark on Hive【文字说明+关键代码】

创建DataFrame的方式 

创建DataFrame的方式
		1).读取json格式的文件
			a).json文件不能嵌套
			b).读取的两种方式:
				DataFrame df = sqlContext.read().format("json").load("./sparksql/json");
				DataFrame df2 = sqlContext.read().json("sparksql/json");
			c).加载过来的DataFrame 列会按照Ascii码排序
			d).可以使用DataFrame的API操作DataFrame,也可以将DataFrame注册成临时表
				df.registerTempTable("jtable");
			
		2).读取json格式的RDD
		
		3).读取普通的RDD加载成DataFrame
			a).反射的方式(少)	
				JavaRDD<Person> personRDD = lineRDD.map(new Function<String, Person>() {

					private static final long serialVersionUID = 1L;

					@Override
					public Person call(String line) throws Exception {
						Person p = new Person();
						p.setId(line.split(",")[0]);
						p.setName(line.split(",")[1]);
						p.setAge(Integer.valueOf(line.split(",")[2]));
						return p;
					}
				});
				DataFrame df = sqlContext.createDataFrame(personRDD, Person.class);
				i).自定类要实现序列化接口
				ii).自定义类的访问级别是public
				iii).加载过来的DataFrame列也会按照Ascii码排序
			b).动态创建Schema(多)
				List<StructField> asList =Arrays.asList(
					DataTypes.createStructField("id", DataTypes.StringType, true),
					DataTypes.createStructField("name", DataTypes.StringType, true),
					DataTypes.createStructField("age", DataTypes.IntegerType, true)
				);
				
				StructType schema = DataTypes.createStructType(asList);
				
				DataFrame df = sqlContext.createDataFrame(rowRDD, schema);
				
				i).加载过来的DataFrame列不会按照Ascii码排序
		
		4).读取parquent文件加载成DataFrame
			读取:
				DataFrame load = sqlContext.read().format("parquet").load("./sparksql/parquet");
				load = sqlContext.read().parquet("./sparksql/parquet");
			存储:
				df.write().mode(SaveMode.Overwrite).format("parquet").save("./sparksql/parquet");
				df.write().mode(SaveMode.Ignore).parquet("./sparksql/parquet");
			
		5).读取Mysql中的数据加载成DataFrame
			读取:
				a).
					Map<String, String> options = new HashMap<String,String>();
					options.put("url", "jdbc:mysql://192.168.179.4:3306/spark");
					options.put("driver", "com.mysql.jdbc.Driver");
					options.put("user", "root");
					options.put("password", "123456");
					options.put("dbtable", "person");
					
					DataFrame person = sqlContext.read().format("jdbc").options(options).load();
				b).
					DataFrameReader reader = sqlContext.read().format("jdbc");
					reader.option("url", "jdbc:mysql://192.168.179.4:3306/spark");
					reader.option("driver", "com.mysql.jdbc.Driver");
					reader.option("user", "root");
					reader.option("password", "123456");
					reader.option("dbtable", "score");
					DataFrame score = reader.load();
			存储:
				Properties properties = new Properties();
				properties.setProperty("user", "root");
				properties.setProperty("password", "123456");
				result.write().mode(SaveMode.Overwrite).jdbc("jdbc:mysql://192.168.179.4:3306/spark", "result", properties);
				
		6).读取Hive中的数据加载成DataFrame
			要配置Spark on Hive,如果SparkSQL要读取数据是Hive中数据,要使用HiveContext,HiveContext是SQLContext的子类。
			读取:
				HiveContext hiveContext = new HiveContext(sc);
				hiveContext.sql("USE spark");
				DataFrame df = hiveContext.table("good_student_infos");
			存储:
				hiveContext.sql("DROP TABLE IF EXISTS good_student_infos");
				goodStudentsDF.write().mode(SaveMode.Overwrite).saveAsTable("good_student_infos");

配置spark on Hive:

5.配置Spark on Hive
		1).在客户端创建../conf/hive-site.xml
			<configuration>
			   <property>
					<name>hive.metastore.uris</name>
					<value>thrift://node1:9083</value>
			   </property>
			</configuration>
		2).启动Hive,在服务端启动metaStore服务,hive --service metastore
		3).spark-shell 测试

谢谢你的鼓励,继续加油。

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/81430051