Spark-Hive-Sqoop:使用 Spark 在配置单元 table 中保存数据,显示带有 Sqoop 导出的垃圾字符
Spark-Hive-Sqoop: Saving data in hive table using Spark showing junk char with Sqoop export
我正在尝试从配置单元 table(hivetable1) 加载数据,然后使用 spark 对其进行一些修改并再次保存在另一个 table(hivetable2) 在配置单元中。
当我从 hivetable2 执行 select * 时,它会显示正确的数据,但是当我尝试在 hdfs 中查看相同的文件时,它会显示所有垃圾字符,如下所示。
当我尝试使用 Sqoop 在 postgres 中导出相同的数据时,它会将整个数据附加到 postgres table 的单列中。
Spark 脚本:
spark = SparkSession \
.builder \
.appName("Python Spark SQL Hive integration example") \
.config("hive.metastore.uris", "thrift://localhost:9083") \
.config("spark.sql.catalogImplementation=hive") \
.enableHiveSupport() \
.getOrCreate()
df = spark.sql("select * from hivetable1")
df.write.format("hive").mode('overwrite').option("delimiter", "\t").saveAsTable("hivetable2")
HDFS文件数据:
hadoop fs -cat /user/hive/warehouse/tb.db/hivetable2/part-0000
lnullunknownnullnullnull\N\N\N\Nnullnullnullnullnull0.00.0nullnull\Nnull\Nnullnullnullnullnull\Nnullnull\Nnullnullnull\Nnullnullnull\Nnullnull
Sqoop 导出:
sqoop export --connect jdbc:postgresql://localhost:5432/postgres?stringtype=unspecified -m 1 --table test --export-dir /user/hive/warehouse/tb.db/hivetable2 \
--username test --password test --input-fields-terminated-by '\t'
我建议单独创建一个配置单元 table 并将数据附加到 table。
其次,一旦完成,您就可以返回数据库。
df.write.mode("overwrite").insertInto("database_name.table", overwrite=True)
我正在尝试从配置单元 table(hivetable1) 加载数据,然后使用 spark 对其进行一些修改并再次保存在另一个 table(hivetable2) 在配置单元中。 当我从 hivetable2 执行 select * 时,它会显示正确的数据,但是当我尝试在 hdfs 中查看相同的文件时,它会显示所有垃圾字符,如下所示。 当我尝试使用 Sqoop 在 postgres 中导出相同的数据时,它会将整个数据附加到 postgres table 的单列中。
Spark 脚本:
spark = SparkSession \
.builder \
.appName("Python Spark SQL Hive integration example") \
.config("hive.metastore.uris", "thrift://localhost:9083") \
.config("spark.sql.catalogImplementation=hive") \
.enableHiveSupport() \
.getOrCreate()
df = spark.sql("select * from hivetable1")
df.write.format("hive").mode('overwrite').option("delimiter", "\t").saveAsTable("hivetable2")
HDFS文件数据:
hadoop fs -cat /user/hive/warehouse/tb.db/hivetable2/part-0000
lnullunknownnullnullnull\N\N\N\Nnullnullnullnullnull0.00.0nullnull\Nnull\Nnullnullnullnullnull\Nnullnull\Nnullnullnull\Nnullnullnull\Nnullnull
Sqoop 导出:
sqoop export --connect jdbc:postgresql://localhost:5432/postgres?stringtype=unspecified -m 1 --table test --export-dir /user/hive/warehouse/tb.db/hivetable2 \
--username test --password test --input-fields-terminated-by '\t'
我建议单独创建一个配置单元 table 并将数据附加到 table。 其次,一旦完成,您就可以返回数据库。
df.write.mode("overwrite").insertInto("database_name.table", overwrite=True)