我在HDFS
中有一个6
CSV
文件。3
存在于名为/user/data/
的目录中,/user/docs/
中名为3
。
/user/data/
有tab_team, tab_players, tab_country
CSV文件。
/user/docs/
有tab_team, tab_players, tab_country
CSV文件。
即使名称相同,这些文件也包含不同的数据。
现在使用这些 CSV 文件,我想使用pyspark
在 Hive 中创建表
我已经做了如下。
file_list = ['tab_team', 'tab_players', 'tab_country']
for team in file_list:
df = sqlContext.read.load("/user/data/{}/*.csv".format(team), format='com.databricks.spark.csv', header='true', inferSchema='true')
df.registerTempTable("my_temp_table")
sqlContext.sql("create table {}.`data_{}` stored as ORC as select * from my_temp_table".format(db_name, team))
for team in file_list:
df = sqlContext.read.load("/user/docs/{}/*.csv".format(team), format='com.databricks.spark.csv', header='true', inferSchema='true')
df.registerTempTable("my_temp_table")
sqlContext.sql("create table {}.`docs_{}` stored as ORC as select * from my_temp_table".format(db_name, team))
我得到了我想要的。但正如您在此处看到的,大多数代码都是重复代码。我想减少代码的重复性。我该怎么做?
另一个循环怎么样?
file_list = ['tab_team', 'tab_players', 'tab_country']
file_path = ['data', 'docs']
for team in file_list:
for path in file_path:
df = sqlContext.read.load("/user/{}/{}/*.csv".format(path, team), format='com.databricks.spark.csv', header='true', inferSchema='true')
df.registerTempTable("my_temp_table")
sqlContext.sql("create table {}.`{}_{}` stored as ORC as select * from my_temp_table".format(db_name, path, team))