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 在配置单元表hdfs文件夹中写入文件,并使其可从配置单元查询_Apache Spark_Hive_Apache Spark Sql_Orc_Hive Metastore - Fatal编程技术网

Apache spark 在配置单元表hdfs文件夹中写入文件,并使其可从配置单元查询

Apache spark 在配置单元表hdfs文件夹中写入文件,并使其可从配置单元查询,apache-spark,hive,apache-spark-sql,orc,hive-metastore,Apache Spark,Hive,Apache Spark Sql,Orc,Hive Metastore,我正在使用Spark 2.2.1,它有一个有用的选项来指定我想在文件的每个分区中保存多少记录;此功能允许在写入文件之前避免重新分区。 但是,此选项似乎仅适用于FileWriter接口,而不适用于DataFrameWriter接口: 这样,该选项将被忽略 df.write.mode("overwrite") .option("maxRecordsPerFile", 10000) .insertInto(hive_table) 而在这种情况下,它是有效的 df.write.option("m

我正在使用Spark 2.2.1,它有一个有用的选项来指定我想在文件的每个分区中保存多少记录;此功能允许在写入文件之前避免重新分区。 但是,此选项似乎仅适用于FileWriter接口,而不适用于DataFrameWriter接口: 这样,该选项将被忽略

df.write.mode("overwrite")
  .option("maxRecordsPerFile", 10000)
 .insertInto(hive_table)
而在这种情况下,它是有效的

df.write.option("maxRecordsPerFile", 10000)
  .mode("overwrite").orc(path_hive_table)
因此,我直接在指定表的HiveMetastore文件夹中写入orc文件。问题是,如果在插入之后查询配置单元表,配置单元将无法识别此数据。 您知道是否有办法在配置单元元存储中直接写入分区文件,并通过配置单元表使其可用?

调试步骤:

一,。检查配置单元表使用的文件类型

Show create table table_name
并选中“存储为”。。 为了提高效率,将输出保存在拼花地板和分区位置(您可以在上面查询的“位置”中看到)…如果有任何其他特定类型,请将文件创建为该类型

二,。如果要在任何分区中保存数据并手动创建分区文件夹,请避免这样做。。使用创建分区

alter table {table_name} add partition ({partition_column}={value});

3.在spark中创建输出文件后。。您可以重新加载这些文件并检查“\u corrupt\u record”(您可以打印数据帧并进行检查)

除此之外,我还发现命令“MSCK REPAIR TABLE”会自动发现配置单元表文件夹中的新分区

我将文件创建为“orc”,这是存储为告诉我的;然后,我尝试使用“alter table add partition”加载到配置单元中,但当我查询数据时,我得到一个ClassCastException,原因是:java.lang.ClassCastException:org.apache.hadoop.io.Text无法强制转换为org.apache.hadoop.hive.serde2.io.TimestampWritable看起来您的数据和配置单元列的数据类型不匹配