【问题标题】:Spark.sql : Remove table's name on columns nameSpark.sql:删除列名上的表名
【发布时间】:2020-08-06 09:50:18
【问题描述】:

当我查询我的数据库时:

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

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

谢谢

【问题讨论】:

  • 您能否用一些示例 i/p & o/p 解释您的问题

标签: python sql apache-spark pyspark


【解决方案1】:

看来你设置了选项

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

在您的 hive-site.xml 或 spark 会话中的某个位置。对于您的目的,它应该是 false

【讨论】:

  • 我们可以直接在sparkContext或者SparkSession或者其他的定义中修改这个参数吗?
  • 试试spark.sql("set hive.resultset.use.unique.column.names=false") 并按照你的步骤行事。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    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))
    

    【讨论】:

    • 欢迎来到 StackOverflow!建议在答案中添加一些解释。仅代码的答案可能会令人困惑。
    猜你喜欢
    • 2023-03-14
    • 2020-07-11
    • 1970-01-01
    • 2016-09-01
    • 2018-07-06
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多