Язык: Scala Spark version: 1.5.2
У меня была такая же проблема, а также попытался разрешить ее с помощью udfs
, но, к сожалению, это привело к появлению большего количества проблем позже в коде из-за тип несоответствий. Я смог обойти это, сначала преобразовывая DF
в RDD
, а затем группируя и обрабатывая данные желаемым способом, а затем преобразовывая RDD
обратно в DF
следующим образом:
val df = sc
.parallelize(Seq(
("username1", "friend1"),
("username1", "friend2"),
("username2", "friend1"),
("username2", "friend3")))
.toDF("username", "friend")
+---------+-------+
| username| friend|
+---------+-------+
|username1|friend1|
|username1|friend2|
|username2|friend1|
|username2|friend3|
+---------+-------+
val dfGRPD = df.map(Row => (Row(0), Row(1)))
.groupByKey()
.map{ case(username:String, groupOfFriends:Iterable[String]) => (username, groupOfFriends.mkString(","))}
.toDF("username", "groupOfFriends")
+---------+---------------+
| username| groupOfFriends|
+---------+---------------+
|username1|friend2,friend1|
|username2|friend3,friend1|
+---------+---------------+
MySQL 3 и 4 (и 5):
desc tablename
, который является псевдонимом для
show fields from tablename
SQL Server (с 2000) и MySQL 5:
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'tablename'
Завершение ответа: как люди ниже сказали, в SQL Server, можно также использовать хранимую процедуру sp_help
exec sp_help 'tablename'
Стандарт SQL-92 определяет INFORMATION_SCHEMA который приспосабливание rdbms's как поддержка SQL Server MS. Следующие работы для SQL Server 2000 MS/2005/2008 и MySql 5 и выше
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'myTable'
Конкретный SQL-сервер мс:
exec sp_help 'myTable'
Это решение возвращает несколько наборов результатов, в которых информация, которой Вы требуете, где, поскольку первый дает Вам точно, что Вы хотите.
Также только для полноты можно запросить sys таблицы непосредственно. Это не рекомендуется, поскольку схема может измениться между версиями SQL Server, и INFORMATION_SCHEMA является слоем абстракции выше этих таблиц. Но здесь это так или иначе для SQL Server 2000
select [name] from dbo.syscolumns where id = object_id(N'[dbo].[myTable]')
Можно использовать обеспеченные системные представления, чтобы сделать это:
, например,
select * from INFORMATION_SCHEMA.COLUMNS
where table_name = '[table name]'
альтернативно, можно использовать систему proc sp_help
, например,
sp_help '[table name]'
PostgreSQL понимает
select column_name from information_schema.columns where table_name = 'myTable'
синтаксис. Если Вы работаете в оболочке psql, можно также использовать
\d myTable
для описания (столбцы, и их типы данных и ограничения)
Только для полноты, так как MySQL и Пост-ГРЭС были уже упомянуты: С SQLite используйте" pragma table_info()
"
sqlite> pragma table_info('table_name');
cid name type notnull dflt_value pk
---------- ---------- ---------- ---------- ---------- ----------
0 id integer 99 1
1 name 0 0
Для тех, которые ищут ответ в Oracle:
SELECT column_name FROM user_tab_columns WHERE table_name = 'TABLENAME'
В SQL Sybase Где угодно, столбцы и информация о таблице хранятся отдельно, таким образом, Вам нужно соединение:
select c.column_name from systabcol c
key join systab t on t.table_id=c.table_id
where t.table_name='tablename'
MySQL является тем же:
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
Если Вы просто хотите имена столбцов, то
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
На SQL Server MS, для получения дополнительной информации о таблице, такой как типы столбцов, использование
sp_help 'tablename'
Для IBM DB2 (проверит это дважды в понедельник, чтобы быть уверенным.)
SELECT TABNAME,COLNAME from SYSCAT.COLUMNS where TABNAME='MYTABLE'
Это - также MySQL Specific:
show fields from [tablename];
это только показывает имена таблиц, но это также вытаскивает всю информацию о полях.