【问题标题】:How to write a dataframe into a database having a column with quotation?如何将数据框写入具有带引号的列的数据库中?
【发布时间】:2020-06-12 09:04:15
【问题描述】:

用架构说 -

'struct<address:string,"name":string>'

一个列名说"name"是带引号的。现在在编写它给出的 df 时:

name expected at the position ..  but '"' is found.

使用以下示例代码:

df
.write
.format(format)
.options(options)
........

【问题讨论】:

  • 如果您至少分享一个源代码示例,它会提供更准确的信息

标签: sql database scala dataframe apache-spark


【解决方案1】:

我的回答如下。我们只是用转义字符重命名列。您应该在写入数据库之前执行此操作,即 df.write 语句。

from pyspark.sql.functions import *
from pyspark.sql.types import *

values = [("112 Street, Pune","Stacky"),
          ("220 Street, Mumbai","John")]
rdd = sc.parallelize(values)
schema = StructType([StructField("address", StringType(), True),                             
StructField("name", StringType(), True)])

data = spark.createDataFrame(rdd, schema)
data.show(20,False)

+------------------+------+
|address           |name  |
+------------------+------+
|112 Street, Pune  |Stacky|
|220 Street, Mumbai|John  |
+------------------+------+

data = data.withColumnRenamed("name","\"name\"")
data.show()

+------------------+------+
|           address|"name"|
+------------------+------+
|112 Street, Pune  |Stacky|
|220 Street, Mumbai|  John|
+------------------+------+

【讨论】:

  • 即使在使用data.withColumnRenamed("name","\"name\"") 之后也没有,它显示为预期的名称,但在写入数据库时​​使用data.withColumnRenamed("name","\"name\""). write....//others options 时在架构中找到'"'
  • 您使用的是哪个数据库?
  • vertica db @Manish
猜你喜欢
  • 2016-01-20
  • 2015-10-13
  • 1970-01-01
  • 2015-03-18
  • 2019-11-17
  • 1970-01-01
  • 2023-02-25
  • 2020-08-27
  • 2015-04-24
相关资源
最近更新 更多