小编dre*_*ddy的帖子

Spark数据框为每个现有行添加一行

我有一个包含以下列的数据框:

groupid,unit,height
----------------------
1,in,55
2,in,54
Run Code Online (Sandbox Code Playgroud)

我想创建另一个包含额外行的数据框,其中unit = cm,height = height*2.54.

结果数据帧:

groupid,unit,height
----------------------
1,in,55
2,in,54
1,cm,139.7
2,cm,137.16
Run Code Online (Sandbox Code Playgroud)

不知道如何使用spark udf并在这里爆炸.任何帮助表示赞赏.提前致谢.

scala explode apache-spark apache-spark-sql

5
推荐指数
1
解决办法
7535
查看次数

spark df.write 引用所有字段但不是空值

我正在尝试从存储在表中的值创建一个 csv:

 | col1   | col2   | col3  |
 | "one"  | null   | "one" |
 | "two"  | "two"  | "two" |

hive > select * from table where col2 is null;
 one   null    one 
Run Code Online (Sandbox Code Playgroud)

我使用以下代码获取 csv:

df.repartition(1)
  .write.option("header",true)
  .option("delimiter", ",")
  .option("quoteAll", true)
  .option("nullValue", "")
  .csv(S3Destination)
Run Code Online (Sandbox Code Playgroud)

CSV我得到:

"col1","col2","col3"
"one","","one"
"two","two","two"
Run Code Online (Sandbox Code Playgroud)

预期的 Csv:对于 NULL 值没有双引号

"col1","col2","col3"
"one",,"one"
"two","two","two"
Run Code Online (Sandbox Code Playgroud)

感谢您了解数据帧编写者是否可以选择执行此操作。

csv apache-spark spark-dataframe

5
推荐指数
1
解决办法
1561
查看次数

合并 scala 数据框中的映射

我有一个包含列 col1、col2、col3 的数据框。col1,col2 是字符串。col3 是下面定义的 Map[String,String]

 |-- col3: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)
Run Code Online (Sandbox Code Playgroud)

我已按 col1、col2 进行分组,并使用collect_list 进行聚合以获取地图数组并存储在 col4 中。

 df.groupBy($"col1", $"col2").agg(collect_list($"col3").as("col4"))

 |-- col4: array (nullable = true)
 |    |-- element: map (containsNull = true)
 |    |    |-- key: string
 |    |    |-- value: string (valueContainsNull = true)
Run Code Online (Sandbox Code Playgroud)

不过,我希望将 col4 作为单个地图,将所有地图组合在一起。目前我有:

[[a->a1,b->b1],[c->c1]]
Run Code Online (Sandbox Code Playgroud)

预期产出

[a->a1,b->b1,c->c1]
Run Code Online (Sandbox Code Playgroud)

使用 udf 会比较理想吗?

任何帮助表示赞赏。谢谢。

scala user-defined-functions dataframe scala-collections apache-spark

3
推荐指数
1
解决办法
4922
查看次数

如何使用带管道的多字符分隔符进行拆分?

我试图根据分隔符":|:|:"在spark中拆分数据帧的字符串列

Input:
TEST:|:|:51:|:|:PHT054008056
Run Code Online (Sandbox Code Playgroud)

测试代码:

dataframe1
.withColumn("splitColumn", split(col("testcolumn"), ":|:|:"))
Run Code Online (Sandbox Code Playgroud)

结果:

+------------------------------+
|splitColumn                   |
+------------------------------+
|[TEST, |, |, 51, |, |, P]     |   
+------------------------------+
Run Code Online (Sandbox Code Playgroud)

测试代码:

dataframe1
.withColumn("part1", split(col("testcolumn"), ":|:|:").getItem(0))
.withColumn("part2", split(col("testcolumn"), ":|:|:").getItem(3))
.withColumn("part3", split(col("testcolumn"), ":|:|:").getItem(6))
Run Code Online (Sandbox Code Playgroud)

part1和part2正常工作.part3只有2个字符,其余的字符串被截断.

第三部分:

P
Run Code Online (Sandbox Code Playgroud)

我想得到整个part3字符串.任何帮助表示赞赏.

scala apache-spark apache-spark-sql

2
推荐指数
1
解决办法
1048
查看次数