1. 程式人生 > >SparkSQL 實現UDF的兩種方式

SparkSQL 實現UDF的兩種方式

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

/**
  */
object sparkDataframe {


  def main(args: Array[String]): Unit = {


    val conf = new SparkConf().setMaster("local[*]").setAppName("anti_Join")

    val sqlcontext = new 
SQLContext(new SparkContext(conf)) import sqlcontext.implicits._ val scoreDF = Seq((1, "sk", 99), (2, "jim", 72), (1, "sk", 99)).toDF("id", "name", "score") val stuDF = Seq((1, "sk", 99), (2, "jim", 72), (3, "jiem", 82)).toDF("id", "name", "score") /* * UDF的兩種模式 * * 1.sqlcontext註冊udf,包含兩個變數,靜態
* * 2.便動態的UDF * * */ sqlcontext.udf.register("nameScore", (name: String, score: String) => { name match { case name: String if name.startsWith("s") => "China" case _ => "USA" } }) val nameScores = udf((name: String, score: String) => { name match
{ case name: String if name.startsWith("s") => "China" case _ => "USA" } }) scoreDF.selectExpr("nameScore(name,score) as Country").show() scoreDF.select(nameScores($"name",$"score").as("Cout")).show() } }
  1. Spark SQL 程式開發過程中,我們有兩種方式確定 schema,第一種是反射推斷 schema,如本文的案例二,這種方式下,我們需要定義樣本類 (case class) 來對應資料的列;第二種方式是通過程式設計方式來確定 schema,這種方式主要是通過 Spark SQL 提供的 StructType 和 StructField 等 API 來程式設計實現,這種方式下我們不需要定義樣本類,如本文中的案例一。

    在程式實現中,我們需要使用以便隱式的把 RDD 轉化成 DataFrame 來操作(Scala 隱式轉換)

  2. 通常來說,我們有兩種方式瞭解 Spark 程式的執行流程。第一種是通過在控制檯觀察輸出日誌,另一種則更直觀,就是通過 Spark Web Console 來觀察 Driver 程式裡各個部分產生的 job 資訊以及 job 裡包含的 stages 資訊。
  3. 需要指出的是,熟練的掌握 Spark SQL/DataFrame 的知識對學習最新的 Spark 機器學習庫 ML Pipeline 至關重要,因為 ML Pipeline 使用 DataFrame 作為資料集來支援多種的資料型別。

相關推薦

Spring系列之AOP實現方式

部分 靜態常量 cep value conf tar import enc ble AOP常用的實現方式有兩種,一種是采用聲明的方式來實現(基於XML),一種是采用註解的方式來實現(基於AspectJ)。 首先復習下AOP中一些比較重要的概念: Joinpoint(連接點)

Android RecyclerView點選事件實現方式

因為經常會用到RecyclerView,今天在這裡總結一下實現RecyclerView點選事件的實現方法 一、通過介面回撥的方式實現     1. 首先定義一個點選的介面(Recyclerview自身不帶有點選事件的回撥) public interface OnRec

mybatis之多條件sql的實現方式

首先稍微補充一下用註解首先sql功能(一般不用這種方法) 原理如下: 檔案圖 實現多條件sql的兩種方式的具體實現程式碼: mybatis.xml <?xml version="1.0" encoding="UTF-8" ?

多執行緒實現方式及其區別

繼承Thread public class Demo2_Thread { public static void main(String[] args) { MyThrea

Python筆記——多執行緒實現方式及讓多條命令併發執行

一 概念介紹         Thread 是threading模組中最重要的類之一,可以使用它來建立執行緒。有兩種方式來建立執行緒:一種是通過繼承Thread類,重寫它的run方法;另一種是建立一個threading.Thread物件,在它的初始化函式(__i

Spring AOP 代理實現方式: JDK動態代理 和 Cglib框架動態代理

1.JDK動態代理 JDK API 內建 ---- 通過 Proxy類,為目標物件建立代理 (必須面向介面代理 ),此文中介面為UserDao,實現類為UserDaoImpl. public class UserDaoImpl implements UserDao {

執行緒實現方式

個人學習記錄所用,不保證理解全部正確。若有出錯的地方,請包涵,並指出。1:繼承Thread,重寫run方法。class PrintNum implements Runnable{@Overridepublic void run() {for(int i=0;i<100;

Android 跑馬燈效果實現方式,解決和viewpager的衝突問題

第一篇部落格寫一點簡單的東西,多麼的簡單,就是一個跑馬燈,簡單的要死。所以話不多,寫起來。首先我們來講一個段子先緩和一下氣氛。大學的時候,隔壁宿舍老喜歡蹭我的wifi,煩死了,然後我把wifi名改成了:206有個帥哥是誰。密碼是我的名字,媽的看誰還蹭,結果。除了

Warshall演算法的實現方式

 法一: import java.util.*; public class TestDemo { public static void main(String[] args){ System.out.print("請輸入矩陣的階數:"); Scanner inpu

Spring中AOP實現方式之JDK和cglib的動態代理

AOP的實現原理: 都是基於代理模式,都是生成一個大代理物件 靜態AOP: AspectJ實現的AOP, 將切面程式碼直接編譯到Java類檔案中 --- 實現: JDK提供的動態代理技術 動態AOP: 將切面程式碼進行動態織入實現的AOP --- Spring的AOP為動態

MFC逃跑按鈕的實現方式

簡易版本的逃跑按鈕的實現,下面是兩個實現方法,一個是建立兩個一樣的按鈕,然後通過一個按鈕接觸滑鼠時,隱藏並顯示另一個按鈕來實現"逃跑"。另一個是通過SetWindowPos函式來隨機地讓按鈕在新位置出現 下面是主要的程式碼 先是第一個版本 然後是第二個版本 // NewBu

java多執行緒實現方式

java自帶主要有兩種實現多執行緒的方式。第一種:繼承執行緒類Thread,重新run的方法。第二種:實現介面Runnable,重新run方法。我先不說明他們的區別。先看程式碼的實現。第一種方式:public class MyThread extends Thread { 

級聯下拉列表 ajax實現方式

案例:設定一個級聯下拉列表,省市區,根據id進行查詢,同屬於同一個省的城市前兩位id相同,屬於同一個市的區前4位id相同 資料庫資料如下(部分): 第一種方式:通過獲取json物件,然後進行解析js

SparkSQL 實現UDF方式

import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.SQLContext import org.apache.spark.sql.functions._ /** *

利用Selenium實現圖片文件上傳的方式介紹

最簡 pfile 狀態 blog nbsp ftw fin send find 在實現UI自動化測試過程中,有一類需求是實現圖片上傳,這種需求根據開發的實現方式,UI的實現方式也會不同。 一、直接利用Selenium實現 這種方式是最簡單的一種實現方式,但是依賴於

CSS3實現動畫的方式

logs del pin 屬性 cnblogs ase http eve 括號 1、設置transition設置過渡,添加transform設置形狀,形成動畫效果,如下: .divadd { transition: All 0.4s ease-in-out;

Nginx反向代理實現會話(session)保持的方式 (轉)

upstream 適用於 反向代理 ip_hash 負載 amp 丟失 tail 基於 http://blog.csdn.net/gaoqiao1988/article/details/53390352 一、ip_hash: ip_hash使用源地址哈希算法,將同一客戶

方式實現sticky footer絕對底部

gin 實現 add charset 什麽是 主體 ica min direction 一、什麽是sticky footer 如果頁面內容不夠長的時候,頁腳塊粘貼在視窗底部;如果內容足夠長時,頁腳塊會被內容向下推送,我們看到的效果就如下面兩張圖這樣。這種效果基本

使用aspectJ實現Spring AOP的方式

classpath .org 導入 ntc www. 之前 oid 方式 public 方式一:基於aspectJ的XML配置 方式二:基於aspectJ的註解方式 基於aspectJ的XML配置 1) 引入相關jar包 2) 創建Spr

Python實現屏幕截圖的方式

spl 程序 當前 bit func 上下 capture 部分 mark Python實現屏幕截圖有兩種方式: 使用windows API 使用PIL中的ImageGrab模塊 下面對兩者的特點和用法進行詳細解釋。 一、Python調用windows API實現屏幕截