繁体   English   中英

Spark.sql:删除列名上的表名

[英]Spark.sql : Remove table's name on columns name

当我查询我的数据库时:

spark.sql("SELECT * FROM MyBase")

我有“我的基地”。 在我所有专栏的名字前面。

我们可以简单地避免这种情况吗? 如果没有,最好的删除方法是什么?

例子:

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

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

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

谢谢

尝试通过删除前缀名称 upto 为您的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|
+---+---+---+
"""

看来您设置了选项

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

在您的蜂巢站点的某个地方。xml 或火花 session。 出于您的目的,它应该是false的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM