spark.sql:删除列名称上的表名称

dgtucam1  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(453)

当我以以下方式查询数据库时:

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     |
+-------------+--------------+

我只想要名称和价格作为列名。
谢谢

yyhrrdl8

yyhrrdl81#

看来是你决定的

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

在hive-site.xml或spark会话中的某个地方。应该是的 false 为了你的目的。

kpbpu008

kpbpu0082#

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))
7z5jn7bk

7z5jn7bk3#

尝试为您的应用程序提供一组新的列 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|
+---+---+---+
"""

相关问题