определение имени файла?

Проверьте это.

scala> val df = Seq(("A",100,1),("A",180,2),("A",250,3),("B",90,2),("B",170,3),("B",280,3)).toDF("categ","amt","price")
df: org.apache.spark.sql.DataFrame = [categ: string, amt: int ... 1 more field]

scala> df.show(false)
+-----+---+-----+
|categ|amt|price|
+-----+---+-----+
|A    |100|1    |
|A    |180|2    |
|A    |250|3    |
|B    |90 |2    |
|B    |170|3    |
|B    |280|3    |
+-----+---+-----+

scala> val df2 = df.withColumn("newc",array(when('amt>=0 and 'amt <=200, map(lit("[0-200]"),'price)),when('amt>150 and 'amt<=300, map(lit("[150-3
00]"),'price))))
df2: org.apache.spark.sql.DataFrame = [categ: string, amt: int ... 2 more fields]

scala> val df3 = df2.select(col("*"), explode('newc).as("rangekv")).select(col("*"),explode('rangekv).as(Seq("range","price2")))
df3: org.apache.spark.sql.DataFrame = [categ: string, amt: int ... 5 more fields]

scala> df3.show(false)
+-----+---+-----+----------------------------------+----------------+---------+------+
|categ|amt|price|newc                              |rangekv         |range    |price2|
+-----+---+-----+----------------------------------+----------------+---------+------+
|A    |100|1    |[[[0-200] -> 1],]                 |[[0-200] -> 1]  |[0-200]  |1     |
|A    |180|2    |[[[0-200] -> 2], [[150-300] -> 2]]|[[0-200] -> 2]  |[0-200]  |2     |
|A    |180|2    |[[[0-200] -> 2], [[150-300] -> 2]]|[[150-300] -> 2]|[150-300]|2     |
|A    |250|3    |[, [[150-300] -> 3]]              |[[150-300] -> 3]|[150-300]|3     |
|B    |90 |2    |[[[0-200] -> 2],]                 |[[0-200] -> 2]  |[0-200]  |2     |
|B    |170|3    |[[[0-200] -> 3], [[150-300] -> 3]]|[[0-200] -> 3]  |[0-200]  |3     |
|B    |170|3    |[[[0-200] -> 3], [[150-300] -> 3]]|[[150-300] -> 3]|[150-300]|3     |
|B    |280|3    |[, [[150-300] -> 3]]              |[[150-300] -> 3]|[150-300]|3     |
+-----+---+-----+----------------------------------+----------------+---------+------+

scala> df3.groupBy('categ,'range).agg(avg('price)).orderBy('categ).show(false)
+-----+---------+----------+
|categ|range    |avg(price)|
+-----+---------+----------+
|A    |[0-200]  |1.5       |
|A    |[150-300]|2.5       |
|B    |[0-200]  |2.5       |
|B    |[150-300]|3.0       |
+-----+---------+----------+

scala>   

Вы также можете создать массив из range строк и взорвать их. Но в этом случае вы получите NULL после взрыва, поэтому вам нужно отфильтровать их.

scala> val df2 = df.withColumn("newc",array(when('amt>=0 and 'amt <=200, lit("[0-200]")),when('amt>150 and 'amt<=300,lit("[150-300]") )))
df2: org.apache.spark.sql.DataFrame = [categ: string, amt: int ... 2 more fields]

scala> val df3 = df2.select(col("*"), explode('newc).as("range"))
df3: org.apache.spark.sql.DataFrame = [categ: string, amt: int ... 3 more fields]

scala> df3.groupBy('categ,'range).agg(avg('price)).orderBy('categ).show(false)
+-----+---------+----------+
|categ|range    |avg(price)|
+-----+---------+----------+
|A    |[150-300]|2.5       |
|A    |[0-200]  |1.5       |
|A    |null     |2.0       |
|B    |[0-200]  |2.5       |
|B    |null     |2.5       |
|B    |[150-300]|3.0       |
+-----+---------+----------+

scala> df3.groupBy('categ,'range).agg(avg('price)).filter(" range is not null ").orderBy('categ).show(false)
+-----+---------+----------+
|categ|range    |avg(price)|
+-----+---------+----------+
|A    |[150-300]|2.5       |
|A    |[0-200]  |1.5       |
|B    |[0-200]  |2.5       |
|B    |[150-300]|3.0       |
+-----+---------+----------+


scala>
6
задан hippietrail 9 January 2013 в 07:26
поделиться

4 ответа

Снова никакие ссылки, но спецификация имени файла зависит от операционной системы или быть более точным файловая система. Позволяет запускаются с ранних версий DOS (Дисковая операционная система). Имена файлов были 8 именами персонажей, содержащими числа, буквы, тире и символы нижнего подчеркивания. Они сопровождались тремя, два, один, или даже обнуляют символьное расширение, используемое для идентификации типа файла. Точка разделила имя от расширения. Имя должно было быть уникальным в каталоге.

Вы могли расширить имя путем добавления имени каталога или серии имен каталогов. символ наклонной черты разделил имена каталогов друг от друга и от имени файла. Это обычно упоминалось как путь. Путь был относительно текущего каталога.

Наконец в DOS Вы могли включать имя дисковода. Обычно одна буква, сопровождаемая a: и наклонная черта (некоторые системы две наклонных черты). Добавление диска к пути сделало это полным путем вместо родственника.

Сегодня большинство из нас использует длинные имена файлов, которые не следуют, старые 8 символов отмечают точкой три символьных шаблона. Все еще много файловых систем сохраняют, такие как имя и используют длинное имя просто в качестве указателя на старый идентификатор стиля.

0
ответ дан 10 December 2019 в 02:55
поделиться
0
ответ дан 10 December 2019 в 02:55
поделиться

Никакие ссылки, просто жаргон на основе опыта. Когда я конкретен, я склонен использовать:

path или filespec (или спецификация файла): все символы должны были определить файл в файловой системе. Путь может быть полным (начинающий с корня, или самый верхний, каталог) или родственник (начинающий с в настоящее время активного каталога).

filename: символы должны были определить файл в текущем каталоге.

extension: символы в конце имени файла, которые обычно определяют тип файла. Условно, расширение обычно запускается с точки (". "), и имя файла может содержать больше чем одно расширение.

basename: имя файла до (но не включая) точка, которая начинает первое расширение.

9
ответ дан 10 December 2019 в 02:55
поделиться

файл · назовите также имя файла
(fīl'nām') Фонетические символы n. Имя, данное компьютерному файлу для различения его из других файлов, часто содержащих расширение, которое классифицирует его типом.

Dictionary.com

Это указывает, что имя файла используется для именования файла, (точно так же, как Вы называете человека). И это это используется для различения его из других файлов. Это не говорит Вам, что включает путь, или другая файловая система наложила атрибуты. В этом определении действительно говорится, что часто имя файла имеет расширение. Но это определение очень тщательно... (Который я думаю, хорошая вещь),

Так.. прежде чем Вы начнете думать о путях и таком, необходимо установить объем. Вы находитесь в мире Unix? Площадь Вы в мире DOS/окон?

0
ответ дан 10 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: