从 sqoop 导入中序列文件



我使用 sqoop 导入了一个表并将其保存为序列文件。

如何将此文件读入 RDD 或数据帧?

我已经尝试过sc.sequenceFile()但我不确定将什么作为键类和值类传递。我尝试使用org.apache.hadoop.io.Text,org.apache.hadoop.io.LongWritable为keyClass和valueClass 但它没有用。我正在使用 pyspark 来读取文件。

在python中它不起作用,但在SCALA中它可以工作:

您需要执行以下步骤:

步骤1: 如果要从 sqoop 导入为序列文件,则会生成一个 jar 文件,您需要在读取序列文件时将其用作 ValueClass。这个jar文件通常放在/tmp文件夹中,但你可以使用--bindir选项将其重定向到特定文件夹(即本地文件夹而不是hdfs(。

例: sqoop import --connect jdbc:mysql://ms.itversity.com/retail_export -- 用户名retail_user --密码itversity --table customers -m 1 --target-dir '/user/srikarthik/udemy/practice4/problem2/outputseq' --as-sequencefile --delete-target-dir --bindir/home/srikarthik/sqoopjars/

步骤2: 另外,您需要从以下链接下载jar文件: http://www.java2s.com/Code/Jar/s/Downloadsqoop144hadoop200jar.htm

步骤3: 假设使用 sqoop 作为序列文件导入客户表。 运行火花壳 --jars 路径到客户.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

步骤4:现在在火花外壳内运行以下命令

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)

您可以使用 SeqDataSourceV2 包通过 DataFrame API 读取序列文件,而无需事先了解架构(也称为 keyClass 和 valueClass(.
请注意,当前版本仅与 Spark 2.4 兼容

$ pyspark --packages seq-datasource-v2-0.2.0.jar
df = spark.read.format("seq").load("data.seq")
df.show()

最新更新