![](/img/trans.png)
[英]Validate data in 2 columns against master table one column 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.