来自sqoop导入的pyspark序列文件

sc4hvdpw  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(317)

我使用sqoop导入了一个表,并将其保存为序列文件。
如何将此文件读入rdd或Dataframe?
我试过了 sc.sequenceFile() 但我不确定传递什么作为keyclass和value类。我尝试使用org.apache.hadoop.io.text、org.apache.hadoop.io.longwritable for keyclass和valueclass,但没有成功。我正在用pyspark读取文件。

2skhul33

2skhul331#

在python中不起作用,但在scala中起作用:
您需要执行以下步骤:
step1:如果您要从sqoop导入sequence文件,则会生成一个jar文件,您需要在读取sequencefile时将其用作valueclass。这个jar文件通常放在/tmp文件夹中,但是您可以使用--bindir选项将它重定向到一个特定的文件夹(即,重定向到本地文件夹而不是hdfs)。
示例:sqoop import--connectjdbc:mysql://ms.itversity.com/retail\u export--username retail\u user--password itversity--table customers-m 1--target dir'/user/srikarthik/udemy/practice4/problem2/outputseq'--as sequencefile--delete target dir--bindir/home/srikarthik/sqoopjars/
第二步:你还需要从下面的链接下载jar文件:http://www.java2s.com/code/jar/s/downloadsqoop144hadoop200jar.htm
步骤3:假设customers表是使用sqoop作为序列文件导入的。运行sparkshell--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

第四步:现在在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)

相关问题