【问题标题】:How to parse sql statement insert into to get values with pyspark如何解析sql语句插入以使用pyspark获取值
【发布时间】:2020-02-02 03:12:21
【问题描述】:

我有一个带有几个insert into 的 sql 转储,如下所示

query ="INSERT INTO `temptable` VALUES (1773,0,'morne',0),(6004,0,'ATT',0)"

我试图只获取数据框中的值

(1773,0,'morne',0)
(6004,0,'ATT',0)

我试过了

spark._jsparkSession.sessionState().sqlParser().parsePlan(query) 

得到

'InsertIntoTable 'UnresolvedRelation `temptable`, false, false
+- 'UnresolvedInlineTable [col1, col2, col3, col4], [List(1773, 0, 
morne, 0), List(6004,0, 0, ATT, 0)]

但我不知道如何检索那些价值列表

有没有办法不用蜂巢?

【问题讨论】:

    标签: python apache-spark pyspark pyspark-sql


    【解决方案1】:

    如果您想从多个插入语句中仅获取值列表,那么您可以在下面尝试

    listOfInserts = [('''INSERT INTO temptable VALUES (1773,0,'morne',0),(6004,0,'ATT',0)''',),('''INSERT INTO temptable VALUES (1673,0,'morne',0),(5004,0,'ATT',0)''',)]
    
    df = spark.createDataFrame(listOfInserts, ['VALUES'])
    
    from pyspark.sql.functions import substring_index
    
    df.select(substring_index(df.VALUES, 'VALUES', -1).alias('right')).show(truncate = False)
    

    【讨论】:

    • 是的,我试图在每个列表的行中仅获取 df 中的值,例如

      +----+----+----+ ----+
      |col1|col2|col3|col4|
      +----+----+----+----+
      |1773| 0|早| 0|
      |6004| 0| ATT| 0|
      |1773| 0|早| 0|
      |6004| 0| ATT| 0|
      +----+----+----+----+
    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2011-05-04
    • 2021-10-11
    • 2021-11-04
    相关资源
    最近更新 更多