Python 基于日期的列顺序整数Spark
我有一个数据集,有一个每天生产一种产品的公司。我想在数据框中添加一列,该列将根据该公司的日期按顺序编号 例如Python 基于日期的列顺序整数Spark,python,apache-spark,pyspark,spark-dataframe,Python,Apache Spark,Pyspark,Spark Dataframe,我有一个数据集,有一个每天生产一种产品的公司。我想在数据框中添加一列,该列将根据该公司的日期按顺序编号 例如 Acme Product1 1 1/1/2000 5 Acme Product1 1/2/2000 7 Acme Product2 2000年3月1日9 Acme Product2 3/2/2000 4 公司2产品X 4/1/2015 6 公司2产品X 4/2/2015 3 我想添加一个新的列,如: Acme Product1 1/1/2000 5 1 Acme Product1 1/2
Acme Product1 1 1/1/2000 5
Acme Product1 1/2/2000 7
Acme Product2 2000年3月1日9
Acme Product2 3/2/2000 4
公司2产品X 4/1/2015 6
公司2产品X 4/2/2015 3
我想添加一个新的列,如:
Acme Product1 1/1/2000 5 1
Acme Product1 1/2/2000 7 2
Acme Product2 3/1/2000 9 1
Acme Product2 3/2/2000 4 2
公司2产品X 4/1/2015 6 1
公司2产品X 4/2/2015 3 2
公司2产品X 4/2/2015 2 3
这一切都是为了让我能够根据新专栏比较公司及其产品。因此,无论日期如何,他们都会在一天内生产一款产品。您可以使用pyspark.sql函数的窗口功能
行数
(别名rowNumber
适用于spark您应该尝试这样做,并在遇到问题或解决方案不起作用时询问。这是正确的答案,它不应该被关闭。这起作用了……谢谢!我只是在学习,所以我不确定从哪里开始,我尝试的每件事都给出了错误。起初,我得到了一些注释“'F'未定义”,因此在研究后,我不得不添加“从pyspark.sql导入函数为F”和“从pyspark.sql.window导入窗口”。然后我得到一些关于rowNumber模块的信息,但没有找到。因此,再次研究后,我不得不改为F.row_number()。
myDF = spark.createDataFrame(
sc.parallelize([["Acme", "Product1", "1/1/2000", 5],
["Acme", "Product1", "1/2/2000", 7],
["Acme", "Product2", "3/1/2000", 9],
["Acme", "Product2", "3/2/2000", 4],
["Company2", "ProductX", "4/1/2015", 6],
["Company2", "ProductX", "4/2/2015", 3],
["Company2", "ProductX", "4/2/2015", 2]]),
["company", "product", "date", "nb"])
+--------+--------+--------+---+
| company| product| date| nb|
+--------+--------+--------+---+
| Acme|Product1|1/1/2000| 5|
| Acme|Product1|1/2/2000| 7|
| Acme|Product2|3/1/2000| 9|
| Acme|Product2|3/2/2000| 4|
|Company2|ProductX|4/1/2015| 6|
|Company2|ProductX|4/2/2015| 3|
|Company2|ProductX|4/2/2015| 2|
+--------+--------+--------+---+
from pyspark.sql.window import Window
import pyspark.sql.functions as F
resultDF = myDF.withColumn(
"rowNum",
F.row_number().over(Window.partitionBy("company", "product")
.orderBy("date")))
+--------+--------+--------+---+------+
| company| product| date| nb|rowNum|
+--------+--------+--------+---+------+
|Company2|ProductX|4/1/2015| 6| 1|
|Company2|ProductX|4/2/2015| 3| 2|
|Company2|ProductX|4/2/2015| 2| 3|
| Acme|Product2|3/1/2000| 9| 1|
| Acme|Product2|3/2/2000| 4| 2|
| Acme|Product1|1/1/2000| 5| 1|
| Acme|Product1|1/2/2000| 7| 2|
+--------+--------+--------+---+------+