Input DF:
+-------------------+---------+
|VALUES |Delimiter|
+-------------------+---------+
|50000.0#0#0# |# |
|0@1000.0@ |@ |
|1$ |$ |
|1000.00^Test_string|^ |
+-------------------+---------+
Expected Output DF:
+-------------------+---------+----------------------+
|VALUES |Delimiter|SPLITED_VALUES |
+-------------------+---------+----------------------+
|50000.0#0#0# |# |[50000.0, 0, 0] |
|0@1000.0@ |@ |[0, 1000.0] |
|1$ |$ |[1] |
|1000.00^Test_string|^ |[1000.00, Test_string]|
+-------------------+---------+----------------------+
Run Code Online (Sandbox Code Playgroud)
代码:
import sparkSession.sqlContext.implicits._
val dept = Seq(("50000.0#0#0#", "#"),("0@1000.0@", "@"),("1$", "$"),("1000.00^Test_string", "^")).toDF("VALUES", "Delimiter")
Run Code Online (Sandbox Code Playgroud)
我对 Spark 非常陌生,尝试使用另一列中的分隔符来拆分“VALUES”列的值。
尝试使用 Spark split 函数作为
val dept2 = dept.withColumn("SPLITED_VALUES", split(col("VALUES"), "#"))
Run Code Online (Sandbox Code Playgroud)
但这里 split 函数将分隔符作为常量值,我无法将其传递为
val dept2 = dept.withColumn("SPLITED_VALUES", split(col("VALUES"), col("Delimiter")))
Run Code Online (Sandbox Code Playgroud)
谁能为此提出更好的方法?
我遇到了需要在 Spark 数据框中将列值收集为 Set() 的情况,以查找与其他集合的差异。我有以下 2 个数据框
DF1
+----+---------+----------+----+-----------------+
|Lily|Sunflower|Windflower|Rose|Snapdragon Flower|
+----+---------+----------+----+-----------------+
|1 |2 |3 |4 |5 |
+----+---------+----------+----+-----------------+
DF2
+-----------------+
|Flowers |
+-----------------+
|Rose |
|Lily |
|Tulip |
|Orchid |
|Snapdragon Flower|
+-----------------+
Run Code Online (Sandbox Code Playgroud)
我想找到 DF1 的列名称与 DF2 中 Flower 列的值之间的集合差异。为此,我编写了以下代码,但在它们的设置差异中创建了空值。代码:
import sparkSession.sqlContext.implicits._
val df1 = Seq(("1", "2", "3", "4", "5")).toDF("Lily", "Sunflower", "Windflower", "Rose", "Snapdragon Flower")
val df2 = Seq("Rose", "Lily", "Tulip", "Orchid", "Snapdragon Flower").toDF("Flowers")
val set1 = df1.columns.toSet
println(s"set1 => ${set1}")
val flower_values = df2.select("Flowers").collectAsList()
var set2 = …Run Code Online (Sandbox Code Playgroud) 在我的代码中table_df有一些列,我正在对这些列进行一些计算,例如 min、max、mean 等,并且我想创建具有指定架构 new_df_schema 的 new_df。在我的逻辑中,我编写了用于计算的 spark-sql,并将每个新生成的行附加到最初为空的 new_df 中,最后,它会生成new_df所有列的所有计算值。
但问题是当列数更多时会导致性能问题。这可以在不使用 union() 函数或任何其他提高性能的方法的情况下完成吗?
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
import sparkSession.sqlContext.implicits._
val table_df = Seq(
(10, 20, 30, 40, 50),
(100, 200, 300, 400, 500),
(111, 222, 333, 444, 555),
(1123, 2123, 3123, 4123, 5123),
(1321, 2321, 3321, 4321, 5321)
).toDF("col_1", "col_2", "col_3", "col_4", "col_5")
table_df.show(false)
table_df.createOrReplaceTempView("table_df")
val new_df_schema = StructType(
StructField("Column_Name", StringType, false) ::
StructField("number_of_values", LongType, false) ::
StructField("number_of_distinct_values", LongType, false) ::
StructField("distinct_count_with_nan", LongType, false) :: …Run Code Online (Sandbox Code Playgroud)