2015-06-10 1 views
0

Я пытаюсь импортировать типы из искры SQL следующим образомОшибка импорта типов из искрового SQL

импорт org.apache.spark.sql.types._

Но я получаю ошибки, такие как: " не найдено: значение DataType», "не найдено: тип ByteType"

полный код

import java.math.BigDecimal                   
import java.sql.{Timestamp, Date}                  

import org.apache.spark.sql.types._                 

/**                         
* Utility functions for type casting                 
*/                         
object TypeCast {                      

    /**                         
    * Casts given string datum to specified type.              
    * Currently we do not support complex types (ArrayType, MapType, StructType).      
    *                         
    * @param datum string value                   
    * @param castType SparkSQL type                  
    */                         
    def castTo(datum: String, castType: DataType): Any = {            
    castType match {                     
     case _: ByteType => datum.toByte                 
     case _: ShortType => datum.toShort                
     case _: IntegerType => datum.toInt                
     case _: LongType => datum.toLong                 
     case _: FloatType => datum.toFloat                
     case _: DoubleType => datum.toDouble                
     case _: BooleanType => datum.toBoolean               
     case _: DecimalType => new BigDecimal(datum.replaceAll(",", ""))         
     case _: TimestampType => Timestamp.valueOf(datum)            
     case _: DateType => Date.valueOf(datum)               
     case _: StringType => datum                  
     case _ => throw new RuntimeException(s"Unsupported type: ${castType.typeName}")     
    }                         
    }                         
+0

Предположительно вы/не получая ошибку при импорте, но позже. Покажите нам код. И «not found: * value * DataType» предполагает, что компилятор не ожидает типа в этой точке ... –

+0

обновил исходный вопрос – EugeneMi

+0

Я не получаю ошибку «not found: value DataType», также из внешнего вида в источнике IntType и т. д. являются объектами case, а не типами/классами. –

ответ

2

ByteType и т.д. не являются типами, но одноэлементные объекты случай.

Таким образом, вы, вероятно, хотите что-то вроде этого:

def castTo(datum: String, castType: DataType): Any = {            
    castType match {                     
     case DataType.ByteType => datum.toByte                 
     case DataType.ShortType => datum.toShort                
     case DataType.IntegerType => datum.toInt                
     case DataType.LongType => datum.toLong                 
     case DataType.FloatType => datum.toFloat                
     case DataType.DoubleType => datum.toDouble                
     case DataType.BooleanType => datum.toBoolean               
     case DataType.DecimalType => new BigDecimal(datum.replaceAll(",", ""))         
     case DataType.TimestampType => Timestamp.valueOf(datum)            
     case DataType.DateType => Date.valueOf(datum)               
     case DataType.StringType => datum                  
     case _ => throw new RuntimeException(s"Unsupported type: ${castType.typeName}")     
    }                         
    } 

(кроме того, что по крайней мере в моей версии Спарк, нет DecimalType и castType не имеет поля TYPENAME)

+0

Спасибо! Начал программирование в Scala неделю назад, так что все еще запутался в некоторых вещах. Я получил код из https://github.com/databricks/spark-csv/blob/master/src/main/scala/com/databricks/spark/csv/util/TypeCast.scala – EugeneMi

+0

Это действительно могло быть хорошим идея объяснить, что вы работали с чужим кодом. Я предлагаю вам связаться с автором этого пакета - я не вижу, как он может работать, по крайней мере, с моей версией Spark, поскольку ByteType и т. Д. Действительно не являются типами –

+0

Может быть, это глупый вопрос, но откуда я знаю, a Тип или одиночный объект? Если у меня есть оба типа ByteType и объект ByteType, определенный. Первый тип, последний - объект singleton .... – EugeneMi