Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何使用spark中的通配符在路径配置单元中运行加载数据命令?_Apache Spark_Pyspark_Hive - Fatal编程技术网

Apache spark 如何使用spark中的通配符在路径配置单元中运行加载数据命令?

Apache spark 如何使用spark中的通配符在路径配置单元中运行加载数据命令?,apache-spark,pyspark,hive,Apache Spark,Pyspark,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(

我正在创建一个数据帧,如下所示:

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")
spark.sql("LOAD DATA INPATH '/home/hdfs/sparkwork/hiveproj/Data/empinfo/empl_par/*.parquet' INTO TABLE EMPINFO.EMPLOYEE")
但如果我使用通配符而不是文件名(*或*.parquet),则会产生错误。

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")
spark.sql("LOAD DATA INPATH '/home/hdfs/sparkwork/hiveproj/Data/empinfo/empl_par/*.parquet' INTO TABLE EMPINFO.EMPLOYEE")
是否有一种方法可以使用spark的配置单元中的通配符命令推送文件夹的所有内容? 请提供相同的帮助。

而不是
spark.sql(“将数据加载到path'/home/hdfs/sparkwork/hiveproj/DATA/empinfo/emp_par/*.parquet'表empinfo.EMPLOYEE”)

尝试使用此
empdf.write.partitionBy(“年”、“月”、“日”).insertInto(“EMPINFO.EMPLOYEE”)


注意我使用了分区列作为
。您可能需要根据您的要求进行更改。

为了获得更好的性能,请尝试使用spark函数而不是hive-
spark.read.format(“parquet”).load(“/home/hdfs/sparkwork/hiveproj/Data/empinfo/emp_par/*.parquet”).write.insertInto(“empinfo.EMPLOYEE”)
。这对我有用。谢谢你,斯里尼瓦斯,我想再问你一个问题。我想我可以在工作中避免创建拼花地板文件。不是吗?一旦我读取了csv文件,我就会得到empdf数据帧。我可以直接将这个数据帧写入配置单元表,不是吗?spark.write.insertInto(“EMPINFO.EMPLOYEE”)由于表数据配置为存储为拼花,因此如果使用insertInto(),数据将存储为拼花。我说的对吗?是的,您只需要调用df.write.insertInto(..)如果目标表是分区的,那么我们需要在insertInto()中同时提到分区列吗?