相关疑难解决方法(0)

在Spark中需要kryo序列化(Scala)

我打开了kryo序列化:

conf.set( "spark.serializer", "org.apache.spark.serializer.KryoSerializer" )
Run Code Online (Sandbox Code Playgroud)

我想确保在节点之间进行混洗时使用kryo序列化自定义类.我可以这样用kryo注册这个类:

conf.registerKryoClasses(Array(classOf[Foo]))
Run Code Online (Sandbox Code Playgroud)

据我了解,这实际上并不能保证使用kyro序列化; 如果序列化程序不可用,kryo将回退到Java序列化.

为了保证kryo序列化的发生,我遵循了Spark文档中的这个建议:

conf.set("spark.kryo.registrationRequired", "true")
Run Code Online (Sandbox Code Playgroud)

但这会导致抛出IllegalArugmentException("Class未注册"),因为我认为Spark会在内部使用一堆不同的类,例如:

org.apache.spark.util.collection.CompactBuffer
scala.Tuple3
Run Code Online (Sandbox Code Playgroud)

当然,我不必用kryo手动注册每个单独的类?这些序列化程序都是用kryo定义的,那么有没有办法自动注册所有这些序列化程序?

apache-spark

31
推荐指数
1
解决办法
2万
查看次数

Array [Byte] Spark RDD to String Spark RDD

我正在使用Cloudera的SparkOnHBase模块来从HBase获取数据.

我以这种方式得到一个RDD:

var getRdd = hbaseContext.hbaseRDD("kbdp:detalle_feedback", scan)
Run Code Online (Sandbox Code Playgroud)

基于此,我得到的是类型的对象

RDD[(Array[Byte], List[(Array[Byte], Array[Byte], Array[Byte])])]
Run Code Online (Sandbox Code Playgroud)

它对应于行键和值列表.所有这些都由字节数组表示.

如果我将getRDD保存到文件中,我看到的是:

([B@f7e2590,[([B@22d418e2,[B@12adaf4b,[B@48cf6e81), ([B@2a5ffc7f,[B@3ba0b95,[B@2b4e651c), ([B@27d0277a,[B@52cfcf01,[B@491f7520), ([B@3042ad61,[B@6984d407,[B@f7c4db0), ([B@29d065c1,[B@30c87759,[B@39138d14), ([B@32933952,[B@5f98506e,[B@8c896ca), ([B@2923ac47,[B@65037e6a,[B@486094f5), ([B@3cd385f2,[B@62fef210,[B@4fc62b36), ([B@5b3f0f24,[B@8fb3349,[B@23e4023a), ([B@4e4e403e,[B@735bce9b,[B@10595d48), ([B@5afb2a5a,[B@1f99a960,[B@213eedd5), ([B@2a704c00,[B@328da9c4,[B@72849cc9), ([B@60518adb,[B@9736144,[B@75f6bc34)])
Run Code Online (Sandbox Code Playgroud)

对于每个记录(rowKey和列)

但我需要的是获取所有和每个键和值的String表示.或者至少是价值观.为了将它保存到文件中,看到类似的东西

key1,(value1,value2...)
Run Code Online (Sandbox Code Playgroud)

或类似的东西

key1,value1,value2...
Run Code Online (Sandbox Code Playgroud)

我对火花和斯卡拉来说是全新的,而且很难得到一些东西.

你能帮帮我吗?

hbase scala apache-spark

1
推荐指数
1
解决办法
6529
查看次数

标签 统计

apache-spark ×2

hbase ×1

scala ×1