这里学位和邮件字段的数据是空的,所以它们不应该被双引号,标题也不应该被双引号
我尝试了这一点,但在空值和双引号标题的情况下不起作用
dataset.toDF().selectExpr(NAME,ID,MOBILE,DEGREE,SALUTATION,LASTNAME,MAIL,DATE_OF_BIRTH)
.write().format("csv")
.option("delimiter", "|"),
.option("quotesAll",true),
.option("header", true)
.option("nullValue", null)
.mode(SaveMode.Overwrite)
.save(path);
选项quoteAll
将引用所有内容(包括header)。类CSVoptions
没有用于自定义格式设置的此类选项。
您可以编写一个自定义表达式来引用非空值,然后保存它。
Scala:
val quote = lit("\"")
//quote value if not null otherwise return.
def quoteColumn(c: Column) = when(c.isNotNull, concat(quote, c.cast(StringType), quote )) otherwise c.cast(StringType)
//call quoteColumn to add quote in all column values in the DataFrame
val resDF = df.select(df.columns.map(a => quoteColumn(col(a)).as(a)):_*)
resDF.write()
.format("csv")
.option("delimiter", "|")
.option("header", true)
//set quote to empty, no need to set null
.option("quote", "")
.mode(SaveMode.Overwrite)
.save(path);
private Column quoteColumn(Column c) {
Column quote = lit("\"");
return when(c.isNotNull(), concat(quote, c.cast(StringType), quote)).otherwise(c.cast(StringType));
}
Dataset<Row> resDF = df.select(Arrays.stream(df.columns()).map(a -> quoteColumn(col(a)).as(a)).toArray(Column[]::new));
resDF.write()
.format("csv")
.option("delimiter", "|")
.option("header", true)
// set quote to empty
.option("quote", "")
// set null for null values
.option("nullValue", null)
.mode(SaveMode.Overwrite)
.save(path);
这是我的的商店代码片段,包含商品和价格: 这是我的杂货车,其中int表示一辆车中每件商品的数量。我对HashMaps非常陌生,对于如何将stock map引用到price方法中并正确地将其相加感到非常困惑。理论上,这个问题的最终答案是2个鸡蛋和2盒橙汁的价格。非常感谢您的帮助
问题内容: 我有一个表,其中的列包含一些空值。我想在该列上添加约束,而不将现有的null更新为非null值。我想保留现有的空值,并检查将来的行,它们是否包含此列的非空值。这可能吗?如何? 问题答案: 您可以添加未验证的约束-它不会查看现有行,但是会检查是否有任何新行或更新行。 请注意,除非满足约束,否则您将无法更新现有行。 另外,请注意,不利之处在于,优化器在制定计划时将无法利用此约束-它必须假设
问题内容: 我有一个名为“ Person”的表名,下面是列名 我忘了约束。 现在,我尝试使用以下查询将“ 约束” 添加到名为的现有列中, 我收到语法错误…。 问题答案: 只需使用查询并将其添加到您现有的列定义中即可。例如: 请注意:使用查询时,您需要再次指定 完整的 列定义。例如,如果您的列具有值或列注释,则需要在语句中与数据类型和一起指定它,否则它将丢失。防止此类情况发生的最安全方法是从查询的输
问题内容: 如何使用exec.command启动带有空格的文件?添加引号似乎无效,“或%20代替空格也不起作用。 问题答案: 这有效,但仅在Windows中
我有一段代码,我想为一个char变量添加值97,但根据ASCII表,得到字母“b”的最终数字98,输出为205。 我的代码有什么问题? 谢谢你的帮助。
问题内容: 例如: 我希望输出是 问题答案: 使用。 用空格替换它们(根据您的问题标题): 上面也可以用字符来完成: 删除它们(按照您的示例):