@hadoopusers

Страница 60 из 182
Daniel
28.12.2017
15:20:40
И опять же это не база, а набор алгоритмов.

Grigory
28.12.2017
15:22:05
Ну и все это про спарк а не про хадуп
вроде считается частью 'хадуп стека' согасно старничке хадупа

Daniel
28.12.2017
15:22:08
Олапы вроде есть в сборках, но не работал сам и кухню не знаю.

Ну ? может много чего хотеть, но спарк живет прекрасно и без него.

Google
Grigory
28.12.2017
15:24:08
ну буквоедством на буквоедство знаешь ли)

sherzod
28.12.2017
15:27:39
насколько я понимаю в классическом виде нет, нет индексов, подсчеты агрегатов по разрезам не быстрые

под конкретный юзкейс конечно можно написать, но вряд ли олаписты думаю про это, там обычно все мышкой

Andrey
28.12.2017
15:28:41
ну разве если с позиции мышки..

так то есть партиции, стораджовые индексы, блум фильтры в орке. В конце концов никто не мешает работать с рбд из спарка

sherzod
28.12.2017
15:29:46
ну если не с позиции мышки, файлы тоже олап))) если прогу такую написать под олап обычно понимают конкретные тулзы в которых накидываешь разрезы, потом жмешь билд, и выполняешь запросы

Andrey
28.12.2017
15:30:08
мы просто своих аналитиков приучили к спарк-шелу

они теперь не хотят ничего другого))

sherzod
28.12.2017
15:30:18
мы тоже)

вернее к zeppelin

SparkSQL их все

Google
Alexey
28.12.2017
17:22:51
коллеги с прошлой работы пишут свой собственный олап на скале, поверх спарка. ну, не совсем поверх, скорее рядом.

Ilia
28.12.2017
17:31:32
Хороший вопрос как поверх спарка что-то писать

Andrey
28.12.2017
17:32:16
Grigory
28.12.2017
17:34:43
трифт конечно

лучший протокол

Ilia
28.12.2017
17:34:56
ну так spark thrift же есть)
Если есть кластер всегда под рукой то может быть, но все равно остаётся проблема разделения ресурсов

Ну и json rpc это перспектива получить ещё один ботлнек

ptchol
29.12.2017
13:14:15
А тинкерпоп или как там его не считается хадуповым ?

Alex
29.12.2017
20:43:27
Каким образом лучше переназначать типы в датасете спарковском? Из примеров нашел вот такой, но выглядит костыльно data = data.withColumn("_f1", data.col("_c1").cast("Double")).drop("_c1")

KrivdaTheTriewe
29.12.2017
20:48:46
Каким образом лучше переназначать типы в датасете спарковском? Из примеров нашел вот такой, но выглядит костыльно data = data.withColumn("_f1", data.col("_c1").cast("Double")).drop("_c1")
Все таки датафреймы с точки зрения скала разработки датафреймы это какакая то насмешка над системой типов

Grigory
29.12.2017
20:49:46
датасеты используй)

KrivdaTheTriewe
29.12.2017
20:51:55
Rdd до последнего хотелось бы )

Alex
29.12.2017
20:55:38
Я csv читаю, использую spark.read.format("csv") . Лучше через SQLcontext читать?

датасеты используй)
Вот таким образом .option("inferSchema",true) ?

Andrey
30.12.2017
01:16:37
Вот таким образом .option("inferSchema",true) ?
это ты просто указываешь, что схема будет вытянута из файлика, а не указана вручную

вручную можно с помощью .schema

KrivdaTheTriewe
30.12.2017
01:43:57
https://m.youtube.com/watch?v=Cpv6MD2ofyU

Google
Alex
30.12.2017
11:45:56
можно еще вот так .select(‘col1.cast(“Double”).alias(“col1”))
В конечном итоге надо было в вектора все затащить. Сделал вот так (data - это DataFrame) val rdd = sc.parallelize(data.map(row => Array(row.getDouble(0), row.getDouble(1), row.getDouble(2), row.getDouble(3))).collect.map(x => Vectors.dense(x))).cache Не подскажешь, есть какой-нибудь более приемлимый способ?

Andrey
30.12.2017
11:49:26
df.map { case Row(a: String, b:Int) => Vectors.dense(a.toDouble, b.toDouble) }

Alex

import o.a.s.s.Row не забудь)

Alex
30.12.2017
12:01:07
df.map { case Row(a: String, b:Int) => Vectors.dense(a.toDouble, b.toDouble) }
Unable to find encoder for type stored in a Dataset.

там внутри double



Он вообще пишет что я ему Any передаю. Уже кажется что легче переделать структуру файлов и сразу в RDD[Vector] читать.

Andrey
30.12.2017
12:22:55
Unable to find encoder for type stored in a Dataset.
домой приду гляну как я делал - но 100% что так у меня работало)

Andrey
30.12.2017
13:09:49
да, все именно так

Спасибо)
data.map { case Row(_c1: Double, _c2: Double, _c3: Double, _c4: Double) => Vectors.dense(_c1, _c2, _c3, _c4) }

Andrey
30.12.2017
13:45:16
а он у тебя вываливается рантайме или при компиляции?

Alex
30.12.2017
13:47:36
а он у тебя вываливается рантайме или при компиляции?
я консоль тыкаю. А пишет он вот это Unable to find encoder for type stored in a Dataset

Andrey
30.12.2017
13:48:44
я консоль тыкаю. А пишет он вот это Unable to find encoder for type stored in a Dataset
ну это понятно. Но валится то когда - сразу когда ентер нажал или он начинает лопатить данные и потом валится с исключением?

Alex
30.12.2017
13:49:10
Сразу валится

Andrey
30.12.2017
13:57:48
ну да, спарк 2.х же

df.rdd.map { case Row(a: Int, b: Int) => Vectors.dense(a,b) }

пробуй, у меня получилось)

Google
Andrey
30.12.2017
13:58:52
import org.apache.spark.ml.linalg.Vectors val rdd = sc.parallelize { (0 to 100).map(x => (x,x)) } val df = rdd.toDF("a","b") df.printSchema import org.apache.spark.sql.Row import spark.implicits._ df.rdd.map { case Row(a: Int, b: Int) => Vectors.dense(a,b) }

Alex
30.12.2017
14:02:07
df.rdd.map { case Row(a: Int, b: Int) => Vectors.dense(a,b) }
отетада. Сработало. Спасибо)

Andrey
30.12.2017
14:02:34
незачто) сразу на будущее - не забудь про то, что если у тебя будут нулы в колонках, то в текущем виде это вывалится в исключение

поэтому либо .na.fill, либо na.drop, либо в мапе добавь дефолтный case _ на какой нибудь вектор)

Alex
30.12.2017
14:04:07
Andrey
30.12.2017
14:04:29
да, ты ему мап передаешь, в какую колонку чо писать

например df.na.fill(Map("a" -> 1, "b" -> 1.0, "c" -> "one"))

Alex
30.12.2017
14:08:10
Andrey
30.12.2017
14:08:21
да, конечно

.na. - это класс функций над датафреймами

Alex
30.12.2017
14:08:53
.na. - это класс функций над датафреймами
В таком случае все понятно :) Спасибо тебе!

Andrey
30.12.2017
14:09:03
незачто)

Alex
30.12.2017
15:59:25
@tenKe не подскажешь, почему соответствия не находит filter? Типы одинаковые внутри. dataVec.filter(x => x==centroids(2))

внутри datavec linalg.Vector и внутри centroids

scala> dataVec.getClass == centroids.getClass res96: Boolean = true

Вообще я хочу из датасета найти ключ, соответствующий вектору

А вектор - центройд кластера

из KMeansModel.clusterCenters

Andrey
30.12.2017
16:07:27
какой тип у dataVec ?

RDD[Vector] ?

Google
Alex
30.12.2017
16:08:52
какой тип у dataVec ?
Array[org.apache.spark.mllib.linalg.Vector]

Оба Array

с вектором внутри

Andrey
30.12.2017
16:14:10
на примитивных примерах вроде работает: import org.apache.spark.ml.linalg.Vector val a = Vectors.dense(1,2,3) val b = Vectors.dense(4,5,6) val c = Array(a,b) c.filter( x => x == a).length // res = 1

Alex
30.12.2017
16:15:21
У меня тоже работает на примитивных) contains FALSE показывает на центройды вообще. Что странно)

Andrey
30.12.2017
16:17:13
может этого вектора в твоем датасете действительно нет?

размер вектора в процессе обработки поменялся или еще что-то

попробуй dataVec.map { x => x.mkString }.filter{ x => x == centroids(2).mkString }

Alex
30.12.2017
16:20:51
mkString is not a member of org.apache.spark.mllib.linalg.Vector

Спасибо. Попробую проверить мб вектора меняются как-то.

Andrey
30.12.2017
16:21:21
О_о у меня работает

Страница 60 из 182