apache-spark - 如何使用 spark 的通配符运行 LOAD DATA INPATH hive 命令?
问题描述
我正在创建一个数据框,如下所示:
from pyspark.sql import SparkSession, functions as f
from pyspark.sql.types import StructType, StructField, DataType, IntegerType, StringType
schma = StructType([
StructField("id", IntegerType(), True),
StructField("name",StringType(), True),
]
)
empdf=spark.read.format("csv").csv("/home/hdfs/sparkwork/hiveproj/Datasets/empinfo/emp.csv",schema=schma);
empdf.show();
我将数据框保存为镶木地板文件。
empdf.write.parquet(path="/home/hdfs/sparkwork/hiveproj/Data/empinfo/empl_par/")
如果我在 LOAD DATA INPATH 命令中使用特定的文件名,那么它工作正常。
spark.sql("LOAD DATA INPATH '/home/hdfs/sparkwork/hiveproj/Data/empinfo/empl_par/part-00000-6cdfcba5-49ab-499c-8d7f-831c9ec314de-c000.snappy.parquet' INTO TABLE EMPINFO.EMPLOYEE")
但是如果我使用通配符而不是文件名(* 或 *.parquet),它会给我错误。
spark.sql("LOAD DATA INPATH '/home/hdfs/sparkwork/hiveproj/Data/empinfo/empl_par/*.parquet' INTO TABLE EMPINFO.EMPLOYEE")
有没有办法在 spark 的 hive 命令中使用通配符推送文件夹的所有内容?请帮忙。
解决方案
代替spark.sql("LOAD DATA INPATH '/home/hdfs/sparkwork/hiveproj/Data/empinfo/empl_par/*.parquet' INTO TABLE EMPINFO.EMPLOYEE")
尝试使用这个empdf.write.partitionBy("year","month","day").insertInto("EMPINFO.EMPLOYEE")
请注意,我已将分区列用作year
, month
& day
。您可能需要根据您的要求进行更改。
推荐阅读
- java - protobuf 的安全问题 任何字段?
- postgresql - POSTGRES - 查询没有修剪平均值的结果数据的目的地
- python - Python - urllib - 服务器在“?”之后没有得到所有东西 在网址中
- java - Java:如何从包含更多参数类型的列表中仅返回一种参数类型的对象?
- c# - 按 PackageName 分类的 UsageStats 中排名前 5 位的应用程序
- javascript - 根据所选选项更改按钮 url
- python - Dataflow 中的 Apache Beam 获取与生成器对象相关的错误不可下标
- reactjs - 在 gitlab-ci 上构建反应应用程序时出错
- list - 如何将嵌套列表除以 int 2
- jquery - 如何将对象数据从快速路由传输到 jquery