SparkSQL中DataFrame常用API

[html]  view plain  copy
  1. <pre code_snippet_id="2337139" snippet_file_name="blog_20170417_1_1032614" name="code" class="java">package com.fosun.sparkdemo;  
  2.   
  3. import org.apache.spark.SparkConf;  
  4. import org.apache.spark.api.java.JavaSparkContext;  
  5. import org.apache.spark.sql.DataFrame;  
  6. import org.apache.spark.sql.SQLContext;  
  7. import org.apache.spark.sql.functions;  
  8. import org.apache.spark.sql.api.java.UDF1;  
  9. import org.apache.spark.sql.types.DataTypes;  
  10.   
  11. public class DataFrameJson {  
  12.   
  13.     public static void main(String[] args) {  
  14.         JavaSparkContext sc =new JavaSparkContext((new SparkConf()).setAppName("Json").setMaster("local"));  
  15.         SQLContext sqlContext = new SQLContext(sc);  
  16.         //自定义UDF函数  
  17. //      sqlContext.udf().register("customF", new UDF1<String,String>(){  
  18. //  
  19. //          private static final long serialVersionUID = 1L;  
  20. //  
  21. //          @Override  
  22. //          public String call(String t1) throws Exception {  
  23. //              return "cast"+t1;  
  24. //          }  
  25. //            
  26. //      }, DataTypes.StringType);  
  27.         //使用json读取文件  
  28. //      DataFrame df = sqlContext.read().json("D:/workspace/work2/sparkdemo/src/main/java/com/fosun/sparkdemo/resource/people.json");  
  29.         //将DataFrame注册为一张表  
  30. //      df.registerTempTable("people");  
  31. //      //查询表中的字段,并将age转化为int型  
  32. //      df = df.select(df.col("name"),df.col("age").cast(DataTypes.IntegerType));  
  33.         //使用自定义函数  
  34. //      DataFrame df2 = sqlContext.sql("select customF(name) from people");  
  35.         //去重  
  36. //      df2 = df2.distinct();  
  37.         //展示DataFrame  
  38. //      df2.show();  
  39.         //过滤,类似于sql中的过滤条件与where相同,col和apply相同都是获取列  
  40. //      df = df.filter(df.col("age").$eq$eq$eq(15).and(df.col("name").$eq$eq$eq("lisi")));  
  41. //      df = df.filter(df.col("age").$greater(14).$amp$amp(df.col("age").$less(16)));  
  42. //      df = df.filter(df.apply("age").$greater(14).$amp$amp(df.apply("age").$less(16)));//df.apply(column)==df.col(column)  
  43. //      df = df.filter("age = 15");  
  44. //      df = df.filter("name = 'lisi'");  
  45. //      df = df.filter("age = 15 && name = 'lisi'");//error 不能使用 &&  
  46. //      df = df.where("age = 15").where("name = 'lisi'");  
  47. //      df.filter(df.col("age").gt(13)).show();  
  48.         //新增一列,并用其他列赋值  
  49. //      df = df.withColumn("subAge", df.col("age").$plus(10));//添加一列  
  50.         //新增一列,常数值列  
  51. //      df = df.withColumn("newColumn", functions.lit(11));//添加一列  
  52.         //给列名重命名  
  53. //      df = df.withColumnRenamed("subAge","newAge");  
  54. //      df = df.groupBy(df.col("name")).count();//添加新的字段count,然后以name来分组  
  55.         //agg使用聚合函数,由于java版缺乏函数式编程的支持,故使用org.apache.spark.sql.functions中的常量方法  
  56. //      df = df.groupBy("name").agg(functions.avg(df.col("age")).alias("avg"));//并且取个别名  
  57. //      df = df.sort(df.col("name").asc(),df.col("age").desc());//排序  
  58.         //将DataFrame保存为parquet文件  
  59. //      df.write().parquet("D:/workspace/work2/sparkdemo/src/main/java/com/fosun/sparkdemo/resource/people.parquet");  
  60. //      //读取parquet文件  
  61. //      DataFrame df2 = sqlContext.read().parquet("D:/workspace/work2/sparkdemo/src/main/java/com/fosun/sparkdemo/resource/people.parquet");  
  62.         //展示DataFrame的schema,和SQL中的Schema类似  
  63. //      df2.printSchema();  
  64. //      df.show();  
  65. //      df.printSchema();  
  66.           
  67.         //查看unix时间戳,java中unix_timestamp是ms,sparkSQL中是ms  
  68. //      DataFrame df = sqlContext.sql("select unix_timestamp() as ts"); //单位是s  
  69. //      df.show();//1492397384  
  70.           
  71.         //有关unix时间戳的格式转化  
  72. //      DataFrame df = sqlContext.sql("select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as datetime"); //单位是s  
  73. //      df.show();//2017-04-17 10:54:36  
  74.           
  75.         sc.stop();  
  76.     }  
  77.   
  78. }  
  79. </pre><br>  
  80. <br>  
  81. <pre></pre>  
  82. <pre code_snippet_id="2337139" snippet_file_name="blog_20170417_1_1032614" name="code" class="html"></pre><pre code_snippet_id="2337139" snippet_file_name="blog_20170417_1_1032614" name="code" class="html">项目的pom.xml文件</pre><pre code_snippet_id="2337139" snippet_file_name="blog_20170417_1_1032614" name="code" class="html"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  83.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  84.   <modelVersion>4.0.0</modelVersion>  
  85.   
  86.   <groupId>com.fosun</groupId>  
  87.   <artifactId>sparkdemo</artifactId>  
  88.   <version>0.0.1-SNAPSHOT</version>  
  89.   <packaging>jar</packaging>  
  90.   
  91.   <name>sparkdemo</name>  
  92.   <url>http://maven.apache.org</url>  
  93.   
  94.   <properties>  
  95.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  96.   </properties>  
  97.   
  98.   <dependencies>  
  99.   <dependency>  
  100.         <groupId>org.apache.spark</groupId>  
  101.         <artifactId>spark-core_2.10</artifactId>  
  102.         <version>1.6.2</version>  
  103.     </dependency>  
  104.     <dependency>  
  105.         <groupId>org.apache.spark</groupId>  
  106.         <artifactId>spark-sql_2.10</artifactId>  
  107.         <version>1.6.2</version>  
  108.     </dependency>  
  109.     <dependency>  
  110.       <groupId>junit</groupId>  
  111.       <artifactId>junit</artifactId>  
  112.       <version>3.8.1</version>  
  113.       <scope>test</scope>  
  114.     </dependency>  
  115.   </dependencies>  
  116.     
  117.   <build>  
  118.     <plugins>  
  119.         <plugin>  
  120.             <groupId>org.apache.maven.plugins</groupId>  
  121.             <artifactId>maven-compiler-plugin</artifactId>  
  122.             <version>3.5.1</version>  
  123.             <configuration>  
  124.                 <source>1.8</source>  
  125.                 <target>1.8</target>  
  126.                 <encoding>UTF-8</encoding>  
  127.             </configuration>  
  128.         </plugin>  
  129.     </plugins>  
  130. </build>  
  131. </project>  
  132. </pre>  
  133. <p>项目中使用到的json文件</p>  
  134. <p></p>  
  135. <pre code_snippet_id="2337139" snippet_file_name="blog_20170417_2_2047153" name="code" class="plain">[{"name":"zhangsan","age":"12"},{"name":"lisi","age":"15"},{"name":"lisi","age":"18"}]</pre><br>  
  136. <br>  
  137. <p></p>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值