spark 2.4第一个Dataframe看起来像:
Salesperson_21: Customer_575,Customer_2703,Customer_2682,Customer_2615
Salesperson_11: Customer_454,Customer_158,Customer_1859,Customer_2605
Salesperson_10: Customer_1760,Customer_613,Customer_3008,Customer_1265
Salesperson_4: Customer_1545,Customer_1312,Customer_861,Customer_2178
第二个Dataframe看起来和图中的一样。
代码:
val df1 = spark.read.schema("Salesperson STRING, Customer STRING")
.option("sep", ":")
.csv("D:/New folder/prints/salesperson.txt".split(System.lineSeparator()).toSeq.toDS())
df1.show(false)
df1.printSchema()
val df2 = spark.read
.option("sep", ",")
.option("inferSchema", "true")
.option("header", "true")
.option("nullValue", "null")
.csv("D:/New folder/prints/Type.csv")
df2.show(false)
df2.printSchema()
问题来了。当我打印模式的时候,我变得像。
val processedDF = df1.withColumn("Customer", explode(split(trim(col("Customer")), ",")))
processedDF.show(false)
processedDF.join(df2, Seq("Customer"), "left")
.groupBy("Customer")
.agg(count("Type").as("Occurance"), first("Salesperson").as("Salesperson"))
.show(false)
预期输出
从dataframe1带来所有客户及其销售人员的预期输出,以及客户在DataFrame2中出现的次数(称为发生)。我添加了快照图片以提高可见性。请帮帮我。
1条答案
按热度按时间lyr7nygr1#
你不需要
stack
这里-使用分隔符读取文本文件
:
split
以及explode
客户Left Join
使用df2计算发生率
加载数据1。使用分隔符读取文本文件:
2. 分割和扩大客户
3. 与df2和DF4左连接。计算发生率