我已经使用sqoop导入了一个表并将其保存为序列文件。
我如何将此文件读入RDD或数据框?
我已经尝试过sc.sequenceFile()
,但是我不确定作为keyClass和value Class传递什么。我尝试将org.apache.hadoop.io.Text,org.apache.hadoop.io.LongWritable用于keyClass和valueClass但它没有用。我正在使用pyspark读取文件。
在python中不起作用,但是在SCALA中它起作用:
您需要执行以下步骤:
步骤1:如果要从sqoop导入为序列文件,则会生成一个jar文件,在读取sequencefile时需要将其用作ValueClass。此jar文件通常位于/ tmp文件夹中,但是您可以使用--bindir选项将其重定向到特定文件夹(即,重定向到本地文件夹而不是hdfs)。
示例:sqoop导入-连接jdbc:mysql://ms.itversity.com/retail_export-用户名retail_user-密码迭代-表客户-m 1 --target-dir'/ user / srikarthik / udemy / practice4 / problem2 / outputseq'--as-sequencefile --delete-target-dir --bindir / home / srikarthik / sqoopjars /
step2:另外,您需要从以下链接下载jar文件:http://www.java2s.com/Code/Jar/s/Downloadsqoop144hadoop200jar.htm
step3:假设客户表是使用sqoop作为序列文件导入的。运行spark-shell --jars path-to-customers.jar,sqoop-1.4.4-hadoop200.jar
示例:
spark-shell --master yarn --jars /home/srikarthik/sqoopjars/customers.jar,/home/srikarthik/tejdata/kjar/sqoop-1.4.4-hadoop200.jar
step4:现在在spark-shell内的命令下运行
scala> import org.apache.hadoop.io.LongWritable
scala> val data = sc.sequenceFile[LongWritable,customers]("/user/srikarthik/udemy/practice4/problem2/outputseq")
scala> data.map(tup => (tup._1.get(), tup._2.toString())).collect.foreach(println)