С помощью функции struct
используйте функцию struct
для группировки столбцов, прежде чем собирать в виде списка:
import org.apache.spark.sql.functions.{collect_list, struct}
import sqlContext.implicits._
val df = Seq(
("john", "tomato", 1.99),
("john", "carrot", 0.45),
("bill", "apple", 0.99),
("john", "banana", 1.29),
("bill", "taco", 2.59)
).toDF("name", "food", "price")
df.groupBy($"name")
.agg(collect_list(struct($"food", $"price")).as("foods"))
.show(false)
Выходы:
+----+---------------------------------------------+
|name|foods |
+----+---------------------------------------------+
|john|[[tomato,1.99], [carrot,0.45], [banana,1.29]]|
|bill|[[apple,0.99], [taco,2.59]] |
+----+---------------------------------------------+
Cookie только читаемы доменом, который создал их, поэтому если cookie был создан по metric.foo.com, он должен будет быть удален под тем же доменом, как он был создан. Это включает субдомены.
Если Вы будете обязаны удалять cookie из metric.foo.com, но в настоящее время выполните страницу по www.foo.com, то Вы не сможете.
Чтобы сделать это, необходимо загрузить страницу из metric.foo.com или создать cookie в соответствии с foo.com, таким образом, это может быть доступно под любым субдоменом. ИЛИ используйте это:
Response.cookies ("микооки") .domain = ".foo.com"
... при создании его, И перед удалением его.
.. непротестированный - должен работать.
У меня была та же проблема с субдоменами. По некоторым причинам получение cookie сначала от запроса не работало. Вместо этого я закончил тем просто, что создал новый cookie с тем же именем cookie и дату окончания срока действия в прошлом. Это работало отлично:
void DeleteSubdomainCookie(HttpResponse response, string name) { HttpCookie cookie = new HttpCookie(name); cookie.Expires = DateTime.Now.AddMonths(-1); cookie.Domain = ".yourdomain.com"; response.Cookies.Add(cookie); }