List of usage examples for org.apache.spark.sql.types DataTypes createMapType
public static MapType createMapType(DataType keyType, DataType valueType)
From source file:com.bosscs.spark.commons.utils.CellsUtils.java
License:Apache License
private static DataType getDataType(Object value) { Class cls = value.getClass(); DataType dataType;/*from www.ja va2s. co m*/ if (cls.equals(String.class)) { dataType = DataTypes.StringType; } else if (cls.equals(Byte[].class)) { dataType = DataTypes.BinaryType; } else if (cls.equals(Boolean.class)) { dataType = DataTypes.BooleanType; } else if (cls.equals(Timestamp.class)) { dataType = DataTypes.TimestampType; } else if (cls.equals(Double.class)) { dataType = DataTypes.DoubleType; } else if (cls.equals(Float.class)) { dataType = DataTypes.FloatType; } else if (cls.equals(Byte.class)) { dataType = DataTypes.ByteType; } else if (cls.equals(Integer.class)) { dataType = DataTypes.IntegerType; } else if (cls.equals(Long.class)) { dataType = DataTypes.LongType; } else if (cls.equals(Short.class)) { dataType = DataTypes.ShortType; } else if (value instanceof List) { List listValue = (List) value; if (listValue.isEmpty()) { dataType = DataTypes.createArrayType(DataTypes.StringType); } else { dataType = DataTypes.createArrayType(getDataType(listValue.get(0))); } } else if (value instanceof Map) { Map mapValue = (Map) value; if (mapValue.isEmpty()) { dataType = DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType); } else { Map.Entry entry = (Map.Entry) mapValue.entrySet().iterator().next(); dataType = DataTypes.createMapType(getDataType(entry.getKey()), getDataType(entry.getValue())); } } else { dataType = DataTypes.StringType; } return dataType; }
From source file:org.wso2.carbon.analytics.spark.core.util.AnalyticsCommonUtils.java
License:Open Source License
public static DataType getDataType(Type returnType) throws AnalyticsUDFException { DataType udfReturnType = null;//from w w w . j a va 2 s.c om if (returnType == Integer.TYPE || returnType == Integer.class) { udfReturnType = DataTypes.IntegerType; } else if (returnType == Double.TYPE || returnType == Double.class) { udfReturnType = DataTypes.DoubleType; } else if (returnType == Float.TYPE || returnType == Float.class) { udfReturnType = DataTypes.FloatType; } else if (returnType == Long.TYPE || returnType == Long.class) { udfReturnType = DataTypes.LongType; } else if (returnType == Boolean.TYPE || returnType == Boolean.class) { udfReturnType = DataTypes.BooleanType; } else if (returnType == String.class) { udfReturnType = DataTypes.StringType; } else if (returnType == Short.TYPE || returnType == Short.class) { udfReturnType = DataTypes.ShortType; } else if (returnType == NullType.class) { udfReturnType = DataTypes.NullType; } else if (returnType == Byte.TYPE || returnType == Byte.class) { udfReturnType = DataTypes.ByteType; } else if (returnType == byte[].class || returnType == Byte[].class) { udfReturnType = DataTypes.BinaryType; } else if (returnType == Date.class) { udfReturnType = DataTypes.DateType; } else if (returnType == Timestamp.class) { udfReturnType = DataTypes.TimestampType; } else if (returnType == BigDecimal.class) { udfReturnType = DataTypes.createDecimalType(); } else if (returnType instanceof ParameterizedType) { ParameterizedType type = (ParameterizedType) returnType; /*if return type is a List types will contain only 1 element, if return type is Map it will have 2 elements types representing key and the value.*/ Type[] types = type.getActualTypeArguments(); if (types != null && types.length > 0) { switch (types.length) { case 1: { udfReturnType = DataTypes.createArrayType(getDataType(types[0])); break; } case 2: { udfReturnType = DataTypes.createMapType(getDataType(types[0]), getDataType(types[1])); break; } default: throw new AnalyticsUDFException("Cannot Map the return type either to ArrayType or MapType"); } } } else { throw new AnalyticsUDFException("Cannot determine the return DataType: " + returnType.toString()); } return udfReturnType; }