PySpark,在数据块上没有 "category" 的情况下从数据框创建折线图

PySpark, create line graph from a dataframe without a "category" on databricks

我是 运行 databricks 上的以下代码:

dataToShow = jDataJoined.\
withColumn('id', monotonically_increasing_id()).\
filter( 
  (jDataJoined.containerNumber == 'SUDU8108536')).\
select(col('id'), col('returnTemperature'), col('supplyTemperature'))

这会给我表格数据,例如

现在我想显示一个以 returnTemperature 和 supplyTemperature 作为类别的折线图。

据我所知,databricks 中的方法 display 想要将类别作为第二个参数,所以基本上我应该拥有的是

id - temperatureCategory - value
1 - returnTemperature - 25.0
1 - supplyTemperature - 27.0
2 - returnTemperature - 24.0
2 - supplyTemperature - 28.0

如何以这种方式转换数据框?

我不知道您的格式是否符合显示方法的要求,但您可以使用 sql 函数进行此转换 create_map and explode:

#creates a example df
from pyspark.sql import functions as F
l1 = [(1,25.0,27.0),(2,24.0,28.0)]
df = spark.createDataFrame(l1,['id','returnTemperature','supplyTemperature'])

#creates a map column which contains the values of the returnTemperature and supplyTemperature
df = df.withColumn('mapCol', F.create_map(
                                    F.lit('returnTemperature'),df.returnTemperature
                                    ,F.lit('supplyTemperature'),df.supplyTemperature
                                   ) 
                  )
#The explode function creates a new row for each element of the map
df = df.select('id',F.explode(df.mapCol).alias('temperatureCategory','value'))
df.show()

输出:

+---+-------------------+-----+ 
| id|temperatureCategory|value| 
+---+-------------------+-----+ 
| 1 |  returnTemperature| 25.0| 
| 1 |  supplyTemperature| 27.0| 
| 2 |  returnTemperature| 24.0| 
| 2 |  supplyTemperature| 28.0| 
+---+-------------------+-----+