Spark. sql: удалить имя таблицы из имени столбца - PullRequest
0 голосов
/ 06 августа 2020

, когда я запрашиваю свою базу данных как:

spark.sql("SELECT * FROM MyBase")

У меня есть MyBase. перед всем моим названием столбца.

Можно ли этого просто избежать? Если нет, то как лучше всего его удалить?

Пример:

df = spark.sql("SELECT name, price FROM MyBase")
df.show(2)

+-------------+--------------+
| mybase.name | mybase.price |
+-------------+--------------+
|    Jean     |     15.0     |
|    Phil     |     10.0     |
+-------------+--------------+

Мне просто нужны имя и цена в качестве имени столбца.

Спасибо

Ответы [ 3 ]

1 голос
/ 06 августа 2020

Кажется, что вы установили опцию

hive.resultset.use.unique.column.names=true

где-то на вашем сайте-улье. xml или в сеансе Spark. Для ваших целей это должно быть false.

1 голос
/ 06 августа 2020

Попробуйте предоставить новый набор столбцов для dataframe, удалив имя префикса до .. Вот пример решения, которое будет работать для всех столбцов.

data = [(1,2,3), (11,22,33)]
df1 = spark.createDataFrame(data,['a.a','a.b','a.c'])
df1.show()
"""
+---+---+---+
|a.a|a.b|a.c|
+---+---+---+
|  1|  2|  3|
| 11| 22| 33|
+---+---+---+
"""


new_cols = [i[i.find('.')+1:] for i in df1.columns]
df2 = df1.toDF(*new_cols)
df2.show()
"""
+---+---+---+
|  a|  b|  c|
+---+---+---+
|  1|  2|  3|
| 11| 22| 33|
+---+---+---+
"""
0 голосов
/ 07 августа 2020
data = [(1,2,3), (11,22,33)]
df1 = spark.createDataFrame(data,['a.a','a.b','a.c'])
cols = [x.split('.')[1] for x in df1.columns]
display(df1.toDF(*cols))
...