使用 pyspark 从 CSV 文件在 Hive 中创建表的更好方法



我在HDFS中有一个6CSV文件。3存在于名为/user/data/的目录中,/user/docs/中名为3

/user/data/tab_team, tab_players, tab_countryCSV文件。

/user/docs/tab_team, tab_players, tab_countryCSV文件。

即使名称相同,这些文件也包含不同的数据。

现在使用这些 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))

最新更新