我的桌子上有a,b,c列。 hdfs上的数据存储为实木复合地板,即使该实木复合地板已经使用a,b,c模式编写,也可以更改特定的列名吗?
答案 0 :(得分:0)
尝试使用ALTER TABLE
desc p;
+-------------------------+------------+----------+--+
| col_name | data_type | comment |
+-------------------------+------------+----------+--+
| category_id | int | |
| category_department_id | int | |
| category_name | string | |
+-------------------------+------------+----------+--+
alter table p change column category_id id int
desc p;
+-------------------------+------------+----------+--+
| col_name | data_type | comment |
+-------------------------+------------+----------+--+
| id | int | |
| category_department_id | int | |
| category_name | string | |
+-------------------------+------------+----------+--+
答案 1 :(得分:0)
循环读取文件 用更改的列名创建一个新的df 在附加模式下在另一个目录中写入新的df 将这个新目录移动到读取目录
cmd=['hdfs', 'dfs', '-ls', OutDir]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for i in process.communicate():
if i:
for j in i.decode('utf-8').strip().split():
if j.endswith('snappy.parquet'):
print('reading file ',j)
mydf = spark.read.format("parquet").option("inferSchema","true")\
.option("header", "true")\
.load(j)
print('df built on bad file ')
mydf.createOrReplaceTempView("dtl_rev")
ssql="""select old-name AS new_name,
old_col AS new_col from dtl_rev"""
newdf=spark.sql(ssql)
print('df built on renamed file ')
aggdf.write.format("parquet").mode("append").save(newdir)
答案 2 :(得分:0)
我们无法在现有文件中重命名列名,镶木地板将架构存储在数据文件中, 我们可以使用以下命令检查架构 实木复合地板工具架构part-m-00000.parquet
我们必须将备份备份到临时表中并重新记录历史数据。