文档章节

使用Java编程方式将RDD转换成DataFrame

别寒
 别寒
发布于 2017/07/26 15:20
字数 346
阅读 91
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

package cn.hhb.spark.sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.*;
import org.apache.spark.sql.types.*;

import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * 以编程方式动态指定元数据,将rdd转换为dataframe
 * Created by dell on 2017/7/26.
 */
public class RDD2DataFrameProgrammatically {
    public static void main(String[] args) {

        // 创建SparkConf
        SparkConf conf = new SparkConf()
                .setAppName("filter").setMaster("local")
                .set("spark.testing.memory", "2147480000");

        // 创建javasparkContext
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);

        // 第一步,创建一个普通的rdd,但是必须将其转换为rdd<row>的格式
        JavaRDD<String> lines = sc.textFile("c://students.txt");

        // 往row中塞数据的时候,要注意,什么格式的数据,就用什么格式转换一下
        JavaRDD<Row> studentRDD = lines.map(new Function<String, Row>() {
            @Override
            public Row call(String line) throws Exception {
                String[] lineSplited = line.split(",");
                return RowFactory.create(
                        Integer.valueOf(lineSplited[0]),
                        lineSplited[1],
                        Integer.valueOf(lineSplited[2]));
            }
        });

        // 第二步,动态构造元数据
        /**
         * 比如说,id,name等,field的名称和类型,可能都是在程序运行过程中,动态从mysql里
         * 或者是配置文件中,加载出来的,是不固定的
         * 所以特别适合用这种编程的方式,来构造元数据
         */
        List<StructField> structFilelds = new ArrayList<StructField>();
        structFilelds.add(DataTypes.createStructField("id", DataTypes.IntegerType, true));
        structFilelds.add(DataTypes.createStructField("name", DataTypes.StringType, true));
        structFilelds.add(DataTypes.createStructField("age", DataTypes.IntegerType, true));
        StructType structType = DataTypes.createStructType(structFilelds);

        // 第三步,使用动态构造的元数据,将rdd转换为dataframe
        DataFrame studentDF = sqlContext.createDataFrame(studentRDD, structType);

        // 后面就可以使用dataFrame了
        studentDF.registerTempTable("students");

        DataFrame teenagerDF = sqlContext.sql("select * from students where age <= 18");

        List<Row> rows = teenagerDF.javaRDD().collect();

        for (Row row : rows){
            System.out.println(row);
        }

        sc.close();

    }
}

别寒
粉丝 30
博文 273
码字总数 155300
作品 0
永州
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
6
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
664
1
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

HTML5 视频和音频的常用方法

HTML5 中为视频 video 和音频 audio 元素,提供了属性、方法和事件。这两个元素的常用属性上一节我们已经讲过了,本节我们来讲一下这两个元素的方法。 视频和音频的常用方法 HTML5 中为 vide...

凌兮洛
5分钟前
5
0
Git应用详解第一讲:Git分区、配置与日志

Git应用详解第一讲:Git分区、配置与日志 前言 曾经听到过这样一句话:不会「git」就不要敲代码了。细细品味确实有其中的道理,可能是当事人代码被强行覆盖后的叹息吧! 因此,为了避免这种情...

osc_jhlfbvu7
6分钟前
0
0
HashMap、HashSet、HashTable比较

1.HashMap和HashTable区别 线程安全:HashMap线程不安全。而HashTable通过让get/put上锁达到线程安全,不过代价很大。 HashMap允许key/value为null(但只能有一个null键),而HashTable不允许...

曦鱼violet
6分钟前
10
0
SHELL脚本编程练习答案(多版本)

练习: 1、编写脚本 systeminfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核 版本,CPU型号,内存大小,硬盘大小 #!/bin/bashYELLOW='\e[1;33m'RED='\e[1;31m'...

osc_0cugk2ks
7分钟前
0
0
盘点 35 个 Apache 顶级项目,我拜服了…

Apache 软件基金会 Apache 软件基金会,全称:Apache Software Foundation,简称:ASF,成立于 1999 年 7 月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生...

Java技术栈
8分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部