All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.ibizsys.dataflow.spark.dataentity.service.SparkPSDEMethodDTOEngine Maven / Gradle / Ivy

The newest version!
package net.ibizsys.dataflow.spark.dataentity.service;

import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

import net.ibizsys.model.dataentity.service.IPSDEMethodDTO;
import net.ibizsys.model.dataentity.service.IPSDEMethodDTOField;
import net.ibizsys.model.engine.dataentity.service.PSDEMethodDTOEngineBase;
import net.ibizsys.model.engine.util.IAction;

public class SparkPSDEMethodDTOEngine extends PSDEMethodDTOEngineBase implements ISparkPSDEMethodDTOEngine {

	private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(SparkPSDEMethodDTOEngine.class);
	
	@Override
	public Dataset getDataset(Dataset dataset) {

		return (Dataset) this.executeAction("获取DTO结果集", new IAction() {
			@Override
			public Object execute(Object[] args) throws Throwable {
				return onGetDataset(dataset);
			}
		});
	}

	
	protected Dataset onGetDataset(Dataset dataset) throws Throwable{
		Map columnMap = new LinkedHashMap();
		StructType structType = dataset.schema();
		for(StructField field : structType.fields()) {
			
			IPSDEMethodDTOField iPSDEMethodDTOField = this.getPSDEMethodDTOFieldByDEField(field.name(), true);
			if(iPSDEMethodDTOField == null) {
				if(this.isEnableAny()) {
					columnMap.put(field.name().toUpperCase(), dataset.col(field.name()).alias(field.name().toLowerCase()));
				}
				else {
					log.warn(String.format("忽略列[%1$s]", field.name()));
				}
			}
			else {
				columnMap.put(iPSDEMethodDTOField.getLowerCaseName().toUpperCase(), dataset.col(field.name()).alias(iPSDEMethodDTOField.getLowerCaseName().toLowerCase()));
			}
		}
		
		return dataset.select(columnMap.values().toArray(new Column[columnMap.size()]));
	}
}