1. 程式人生 > >java反射載入類,並轉化為DataFrame

java反射載入類,並轉化為DataFrame

動態載入類,構造類的例項,並轉化為DataFrame,同時還要解決入表時,類屬性值與表字段一一對應,同時只有部分欄位有值,其他欄位提供根據欄位型別提供預設值

def mergeRDD(spark:SparkSession,countRDDs:RDD[(String, (Int,Int))],dtoName:String):DataFrame={
  import spark.implicits._
  // 聚合所有指標,並封裝為HashMap ,key 為dto中序號,value為dto 值
val rdd = countRDDs.groupByKey().map(x =>(x._1,x._2.toList)).map{
    x =>
      //從keys分離出相關屬性 ex 1_1_1
val keyList = x._1.split("\t").map{y => val fields =y.split("\001") val value = fields(2) match { case "1" => (fields(1).toInt,fields(0)) case "2"if(!"null".equals(fields(1))) => (fields(1).toString,fields(0)) case _ =>(null,fields(0)) } value } keyList++x._2 }.map{ x => var
map : mutable.HashMap[String,Any] =mutable.HashMap() x.map{y =>map.put(y._2.toString,y._1)} map } // 注意此處的scala類在轉df時出現問題,所以採用java類,放棄case class來裝載資料 val classType = Class.forName(dtoName) val tx = rdd.map{y => val obj = classType.newInstance() val fields = classType.getDeclaredFields for
(i <- 1 until fields.length) { val field = fields(i) val indexKey = i+1+"" field.setAccessible(true) if(i==fields.length-1){ field.set(obj,DateUtil.getSimpleDate(new Date())) }else { if(field.getType.getName.endsWith("Double")){ field.set(obj, y.getOrElse(indexKey, 0.00)) }else if(field.getType.getName.endsWith("Integer")){ field.set(obj, y.getOrElse(indexKey, 0)) }else { field.set(obj, y.getOrElse(indexKey, "")) } } } obj } //此處的classType是java類 val df = spark.createDataFrame(tx,classType) df }

相關推薦

java反射載入化為DataFrame

動態載入類,構造類的例項,並轉化為DataFrame,同時還要解決入表時,類屬性值與表字段一一對應,同時只有部分欄位有值,其他欄位提供根據欄位型別提供預設值 def mergeRDD(spark:S

java獲取excel中資料化為JSON格式

java通過poi讀取execl檔案,並且將其中的map格式和陣列格式的字串,轉化為相應的資料型別。 引入poi庫 讀取execl資料,轉化為json字串 將其中的map格式和陣列格式的字串,轉化為相應的資料型別 引入poi庫: <depen

前端js如何生成一個對象化為json字符串

cti {} 理解 () min jquery pan i++ 2.0 一,直接上代碼 <script src="../../Content/jquery-2.0.3.min.js" type="text/javascript"></script>

ROS bag包資料的回放提取任意話題資料化為txt檔案

一、通過bag檔案記錄話題訊息 當釋出話題的節點執行後,可以通過rostopic list 列出當前執行的話題,然後記錄: mkdir bagfile cd bagfile rosbag record -a #記錄所有的話題 當訊息記錄完成後,結束ctrl+c

Robot Framework 按行讀Excel化為list同時迴圈化為dict

在介面測試時(Post)需要傳入引數: 但引數較多時,如果每次都建立,那非常不方便,且不靈活,為了便於維護,將輸入引數在Excel中維護,靈活多變: 直入主題: Excel引數如下(由於公司安全考慮,欄位引數都會打碼): 我們的介面傳參有12個引數,個別型別有13個引數

python .dcm文件讀取化為.jpg格式

plot pip scipy 文件讀取 com 相關信息 python程序 install pre .dcm文件是DICOM(Digital Imaging and Communications in Medicine)即醫學數字成像和通信中記錄醫學圖像和相關信息的文件,在

C#反射 字符串轉為實體做為參數傳入泛型方法中使用

subst type xxd main.c 發現 get director col asm 工作中有這樣一個需求,有N張不同的報表,每張報表對應一個數據源,以前采用SQL統計方式 ,統計數據采用內存方式,首先在內在裏定義了數據源對應實體。統計條件用lamdba表達式式實現,

java動態編譯class,動態載入執行載入的方法,直接可執行測試

直接上圖上程式碼 public static void main(String[] args) { TestClass testClass=new TestClass(); try { //動態編譯程式碼 Java

根據字串的形式自動匯入模組使用反射找到模組中的例項化物件利用importlib和getattr實現的

例如: auth資料夾下一個SCRF.py檔案,裡面有一個Cors類 class CORS(object): def process_request(self): print('666') auth資料

java 反射轉換(把map轉為java bean , 把javabean 成 map)

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import

Java反射之——Java動態載入

1、靜態載入和動態載入的區分: 我們在理解動態載入的同時,需要區分Java的編譯和執行: 編譯時載入屬於靜態載入,我們平時開發中使用最多的就是靜態載入,new物件都屬於靜態載入類,在編譯時載入所有可能使用到的類(雖然有可能用不到)。A a = new A(); 執行時載入屬於動態載入,我

python處理gz壓縮檔案解壓化為json

import requests import gzip import json # gz檔案地址 url='https://shilupan-basic-user-pro.oss-cn-shangha

使用java反射操作的建構函式成員變數和成員方法

在java.lang.reflect包中有三個類Field,Method,Constructor.分別描述域,方法,構造器。參考API,關於這三個類的說明。 在執行時使用反射分析物件,如果訪問的是私有域或是私有方法,私有建構函式,會丟擲IllegalAccessExce

Android NDK(JNI)學習總結一:Java程式碼中申明native函式-Java呼叫C函式在C函式中訪問java和方法、屬性

本文不涉及android-ndk開發環境搭。 步驟一:新建一個APP,名稱為HelloJNI,然後定義一個類(將會在native程式碼中呼叫和訪問該類): package com.example.hellojni; public class JNITe

Java反射列印的資訊包括的成員函式、成員變數(只獲取成員函式)

import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ClassUtil { /** *

JNI中在被呼叫的C/C++函式中如何訪問Java程式中的編寫應用例項

1、在javah工具生成的C/C++函式宣告中的JNIEnv型別引數和jobject型別引數的介紹 JNIEXPORT void JNICALL Java_jni_TestNative_sayhell

JAVA 資料表反射實體自動生成實體

import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; impor

Java 反射載入

一 Class物件 一個類中有屬性,方法,構造器等,一個Class物件包含了某個特定類的相關資訊,class是描述類的類。 獲取Class物件的三種方式: 1.通過類名獲取 類名.class 2.通過物件獲取 物件名.getClass

反射學習(二)java動態載入

一 什麼是動態載入類 什麼是靜態載入類     Class.forName 不僅表示類的類型別,還代表了動態載入類。編譯時載入是靜態載入類, 執行時載入是動態載入類。 請大家區分編譯 執行。 二.為何要使用動態載入類 用記事本寫了一個程式 並沒有寫A類和B類以及st

Java 編寫測試一個代表地址的Address可以返回完整的地址資訊

編寫一個代表地址的Address類,地址資訊由國家,省份,城市,街道,郵編組成,並且可以返回完整的地址資訊。 class Address{ private String nation,province,city,street,code; pub