trait Base{
def getSubclassArgs = {
import scala.reflect.runtime.{universe =>ru}
val mirror = ru.runtimeMirror(getClass.getClassLoader)
val currentType = mirror.classSymbol(getClass).toType
val instanceMirror = mirror.reflect(this)
val constructor = currentType.decl(ru.termNames.CONSTRUCTOR).asMethod
val constructorParamsName = constructor.paramLists.flatten.map(_.name.toString)
val terms = constructorParamsName.map(name =>currentType.decl(ru.TermName(name)))
val args = terms.map(term =>instanceMirror.reflectField(term.asTerm).get)
args
}
}
class Impl(val args: String) extends Base{}
执行结果如下:
scala>val foo = new Impl("get subclass args!")
foo: Impl = Impl@5f0bf0ed
scala>foo.getSubclassArgs
res2: List[Any] = List(get subclass args!)
这里有一点不那么舒服的地方是Impl的构造参数必须加上val或者var,否则会获取不到。
必须使用高亮参数启Spark-shell,否则遍历RDD现Exceptionjava.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable
spark-shell--conf spark.serializer=org.apache.spark.serializer.KryoSerializer
代码,经MaprDB实测通
import org.apache.spark._
import org.apache.spark.rdd.NewHadoopRDD
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.fs.Path
import org.apache.hadoop.hbase.HColumnDescriptor
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.client.HTable
val tableName = "/app/SubscriptionBillingPlatform/TRANSAC_ID"
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, tableName)
//create rdd
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result])
hBaseRDD.take(2).map(row=>row._2.rawCells).
map(_.map( kv =>(new String(kv.getQualifier()) ->new
String(kv.getValue()) ) ).toMap ). foreach( map =>{ map.foreach{
entry =>print(entry._1 +":" + entry._2 + ", ") }
print("\n-----------\n") } )
//get the row count
val count = hBaseRDD.count()
print("HBase RDD count:"+count)
变量是程序的基本组成单位
var|val 变量名 [: 变量类型] = 变量值
整形
scala整数类型有固定的表数范围和字面长度,不受OS影响
scala的整数默认为整形,如果想表示Long,后面加L
浮点型
不受OS影响
scala浮点型常数默认为Double,声明float后面要加F
浮点型有两种表示方式十进制型和科学计数型(0.12,0.12f,.12,5.12e2=5.12乘以10的2次方)
字符类型
常量用双引号(" ")括起来
允许使用转义符
直接给Char整数,会输出码表对应的字符
Char可以进行运算,字符都有对应的数值
存储:字符->码值->二进制->存储
读取:二进制->码值->字符->读取
布尔类型
只允许取值true和false
只占1个字节
适用于逻辑运算
Unit
只有1个实例null,可以赋值给任意的引用类型,但是不能赋值给值类型(Int等)
函数没有返回值
Nothing
方法不会正确返回
值类型隐式转换
高级隐式转换和隐式函数
略
强制类型转换
自动类型转换的逆过程
将容量大的数据类型转换成容量小的数据类型,使用时要加上强制转换函数,但 可能造成精度降低或溢出 ,要格外注意
强制符号只针对最近的 *** 作数有效,使用括号提升优先级
Char类型可以保存Int常量值,但不能保存Int变量值,需要强转
Byte和Short在运算时当作Int来处理
值类型和字符串类型的转换
基本类型转string + ""
string转基本数据类型 .toInt, .toDouble, ……
12.5转Int 报错!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)