如何解析sql语句插入以使用pyspark获取值
Posted
技术标签:
【中文标题】如何解析sql语句插入以使用pyspark获取值【英文标题】:How to parse sql statement insert into to get values with 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)]
但我不知道如何检索那些价值列表
有没有办法不用蜂巢?
【问题讨论】:
【参考方案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| +----+----+----+----+以上是关于如何解析sql语句插入以使用pyspark获取值的主要内容,如果未能解决你的问题,请参考以下文章
在ibatis和mysql环境下使用insert如何获取返回值