scala - 无法从Sqoop创建的Spark中的序列文件创建数据框

标签 scala apache-spark hadoop sqoop sequencefile

我想读取 orders 数据并从中创建 RDD,它作为 sequence 文件存储在 cloudera 的 hadoop fs 中 虚拟机。以下是我的步骤:

1) 将订单数据导入为序列文件:

sqoop import --connect jdbc:mysql://localhost/retail_db --username retail_dba --password cloudera  --table orders -m 1 --target-dir /ordersDataSet --as-sequencefile   

2)在spark scala中读取文件:

星火 1.6

val sequenceData=sc.sequenceFile("/ordersDataSet",classOf[org.apache.hadoop.io.Text],classOf[org.apache.hadoop.io.Text]).map(rec => rec.toString())  

3) 当我尝试从上面的 RDD 读取数据时,它抛出以下错误:

Caused by: java.io.IOException: WritableName can't load class: orders
    at org.apache.hadoop.io.WritableName.getClass(WritableName.java:77)
    at org.apache.hadoop.io.SequenceFile$Reader.getValueClass(SequenceFile.java:2108)
    ... 17 more
Caused by: java.lang.ClassNotFoundException: Class orders not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2185)
    at org.apache.hadoop.io.WritableName.getClass(WritableName.java:75)
    ... 18 more

不知道为什么说找不到订单。我哪里错了?

我也引用了这两个链接的代码,但运气不好:
1) Refer sequence part
2) Refer step no. 8

最佳答案

sqoop 与它关系不大,这里是一个更现实的场景示例,其中 saveAsSequenceFile 始终假定 k、v 对 - 这可能对您有帮助:

import org.apache.hadoop.io._

val RDD = sc.parallelize( List( (1, List("A", "B")) , (2, List("B", "C")) , (3, List("C", "D", "E")) ) )
val RDD2 = RDD.map(x => (x._1, x._2.mkString("/")))
RDD2.saveAsSequenceFile("/rushhour/seq-directory/2")

val sequence_data = sc.sequenceFile("/rushhour/seq-directory/*", classOf[IntWritable], classOf[Text])
                  .map{case (x, y) => (x.get(), y.toString().split("/")(0), y.toString().split("/")(1))}

sequence_data.collect

返回:

res20: Array[(Int, String, String)] = Array((1,A,B), (2,B,C), (3,C,D), (1,A,B), (2,B,C), (3,C,D))

我不确定您是想要 RDD 还是 DF,但是将 RDD 转换为 DF 当然是微不足道的。

关于scala - 无法从Sqoop创建的Spark中的序列文件创建数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236922/

相关文章:

hadoop - 多个dfs.data.dir时如何将数据复制到HDFS

hadoop - 兼容性 hbase 和 hadoop

apache-spark - 如何使用spark从word2vec模型获取数据帧

javascript - 将函数导出到 scalajs 中的全局范围

scala - 伴生对象中的方法编译为 Scala 中的静态方法?

scala - 使用 View 时出现匹配错误

python - Spark - 使用 groupBy 减少组合数量

apache-spark - 热衷于对远程 Spark Master 执行 "spark-submit"?

java - Hadoop 截断/不一致的计数器名称

scala - 如何发现 Scala 远程 Actor 死亡?