[SQL] 아파치 스파크 DataFrame에 연결하여 열
SQL아파치 스파크 DataFrame에 연결하여 열
우리는 어떻게 아파치 스파크 DataFrame에 두 개의 열을 연결합니까? 우리가 사용할 수있는 스파크 SQL의 모든 기능이 있습니까?
해결법
-
==============================
1.원시 SQL 사용하면 CONCAT을 사용할 수 있습니다 :
원시 SQL 사용하면 CONCAT을 사용할 수 있습니다 :
스파크 1.5.0 이후 당신은 DataFrame API를 CONCAT 기능을 사용할 수 있습니다 :
제 인수 문자열 세퍼레이터 소요 CONCAT_WS 기능도있다.
-
==============================
2.여기에 사용자 정의 이름을 할 수있는 방법
여기에 사용자 정의 이름을 할 수있는 방법
import pyspark from pyspark.sql import functions as sf sc = pyspark.SparkContext() sqlc = pyspark.SQLContext(sc) df = sqlc.createDataFrame([('row11','row12'), ('row21','row22')], ['colname1', 'colname2']) df.show()
, 제공
+--------+--------+ |colname1|colname2| +--------+--------+ | row11| row12| | row21| row22| +--------+--------+
연결하여 새 열을 만듭니다
df = df.withColumn('joined_column', sf.concat(sf.col('colname1'),sf.lit('_'), sf.col('colname2'))) df.show() +--------+--------+-------------+ |colname1|colname2|joined_column| +--------+--------+-------------+ | row11| row12| row11_row12| | row21| row22| row21_row22| +--------+--------+-------------+
-
==============================
3.스파크 스칼라에서 CONCATENATE 문자열 열을 하나의 옵션은 CONCAT를 사용하고 있습니다.
스파크 스칼라에서 CONCATENATE 문자열 열을 하나의 옵션은 CONCAT를 사용하고 있습니다.
널 (null) 값을 확인하는 것이 필요하다. 열 중 하나가 null의 경우, 결과는 널 (NULL)이 될 것이기 때문에 다른 열 중 하나는 정보를 가지고 할 경우에도 마찬가지입니다.
CONCAT 및 withColumn 사용 :
val newDf = df.withColumn( "NEW_COLUMN", concat( when(col("COL1").isNotNull, col("COL1")).otherwise(lit("null")), when(col("COL2").isNotNull, col("COL2")).otherwise(lit("null"))))
CONCAT 선택 사용 :
val newDf = df.selectExpr("concat(nvl(COL1, ''), nvl(COL2, '')) as NEW_COLUMN")
원래 안양에서 COL1과 COL2 : 모두 당신이 값이 컬럼의 연결입니다 NEW_COLUMN이있을 것이다 접근으로.
-
==============================
4.당신이 DF를 사용하여 수행 할 경우, 기존 열을 기반으로 새 열을 추가 UDF를 사용할 수 있습니다.
당신이 DF를 사용하여 수행 할 경우, 기존 열을 기반으로 새 열을 추가 UDF를 사용할 수 있습니다.
val sqlContext = new SQLContext(sc) case class MyDf(col1: String, col2: String) //here is our dataframe val df = sqlContext.createDataFrame(sc.parallelize( Array(MyDf("A", "B"), MyDf("C", "D"), MyDf("E", "F")) )) //Define a udf to concatenate two passed in string values val getConcatenated = udf( (first: String, second: String) => { first + " " + second } ) //use withColumn method to add a new column called newColName df.withColumn("newColName", getConcatenated($"col1", $"col2")).select("newColName", "col1", "col2").show()
-
==============================
5.스파크 2.3에서 (SPARK-22771)은 스파크 SQL은 연결 연산자를 || 지원합니다.
스파크 2.3에서 (SPARK-22771)은 스파크 SQL은 연결 연산자를 || 지원합니다.
예를 들어;
val df = spark.sql("select _c1 || _c2 as concat_column from <table_name>")
-
==============================
6.여기 pyspark을 위해이 일을하는 또 다른 방법은 다음과 같습니다
여기 pyspark을 위해이 일을하는 또 다른 방법은 다음과 같습니다
#import concat and lit functions from pyspark.sql.functions from pyspark.sql.functions import concat, lit #Create your data frame countryDF = sqlContext.createDataFrame([('Ethiopia',), ('Kenya',), ('Uganda',), ('Rwanda',)], ['East Africa']) #Use select, concat, and lit functions to do the concatenation personDF = countryDF.select(concat(countryDF['East Africa'], lit('n')).alias('East African')) #Show the new data frame personDF.show() ----------RESULT------------------------- 84 +------------+ |East African| +------------+ | Ethiopian| | Kenyan| | Ugandan| | Rwandan| +------------+
-
==============================
7.다음은 Dataframe의 열 번호 나 이름을 모르는 경우에 대한 제안입니다.
다음은 Dataframe의 열 번호 나 이름을 모르는 경우에 대한 제안입니다.
val dfResults = dfSource.select(concat_ws(",",dfSource.columns.map(c => col(c)): _*))
-
==============================
8.스파크 2.3.0, 당신은 할 수 있습니다 :
스파크 2.3.0, 당신은 할 수 있습니다 :
spark.sql( """ select '1' || column_a from table_a """)
-
==============================
9.자바에서는이 여러 열을 연결하는 할 수 있습니다. 샘플 코드는 당신에게 시나리오 어떻게 더 나은 이해를 위해 그것을 사용하는 방법을 제공하는 것입니다.
자바에서는이 여러 열을 연결하는 할 수 있습니다. 샘플 코드는 당신에게 시나리오 어떻게 더 나은 이해를 위해 그것을 사용하는 방법을 제공하는 것입니다.
SparkSession spark = JavaSparkSessionSingleton.getInstance(rdd.context().getConf()); Dataset<Row> reducedInventory = spark.sql("select * from table_name") .withColumn("concatenatedCol", concat(col("col1"), lit("_"), col("col2"), lit("_"), col("col3"))); class JavaSparkSessionSingleton { private static transient SparkSession instance = null; public static SparkSession getInstance(SparkConf sparkConf) { if (instance == null) { instance = SparkSession.builder().config(sparkConf) .getOrCreate(); } return instance; } }
상기 연접 코드 COL1, COL2는 COL3 "는 골을 연접"이름 열을 만드는 "_"로 분리된다.
-
==============================
10.또 다른 방법은는 SqlContext를 사용하여 pySpark에서 할 수 있습니다 ...
또 다른 방법은는 SqlContext를 사용하여 pySpark에서 할 수 있습니다 ...
#Suppose we have a dataframe: df = sqlContext.createDataFrame([('row1_1','row1_2')], ['colname1', 'colname2']) # Now we can concatenate columns and assign the new column a name df = df.select(concat(df.colname1, df.colname2).alias('joined_colname'))
-
==============================
11.실제로, 사용자 정의 기능을 구현 할 필요없이 연결을 달성하기 위해 아름다운 붙박이 추상화가있다. 당신이 스파크 SQL을 언급 한 이후, 그래서 당신이 spark.sql를 통해 선언 명령로 전달하려고하는 추측하고있다 (). 그렇다면, 당신은 같은 SQL 명령을 전달하는 정직 방식으로 수행 할 수 있습니다 : SELECT CONCAT
FROM concat_column_name AS (COL1 '<분리>', COL2, ...); 실제로, 사용자 정의 기능을 구현 할 필요없이 연결을 달성하기 위해 아름다운 붙박이 추상화가있다. 당신이 스파크 SQL을 언급 한 이후, 그래서 당신이 spark.sql를 통해 선언 명령로 전달하려고하는 추측하고있다 (). 그렇다면, 당신은 같은 SQL 명령을 전달하는 정직 방식으로 수행 할 수 있습니다 : SELECT CONCAT
FROM concat_column_name AS (COL1 '<분리>', COL2, ...); 또한, 스파크 2.3.0에서, 당신과 함께 라인에서 명령을 사용할 수 있습니다 : SELECT COL1 || COL2 AS는
FROM concat_column_name; , 원하는 구분되는 것을 특징으로하는 (물론 빈 공간 일 수있다) 당신이 읽을하려고하는 임시 또는 영구 테이블입니다.
-
==============================
12.우리는 과정을 아래에 해당하는 자바 구문을 가지고 있습니까
우리는 과정을 아래에 해당하는 자바 구문을 가지고 있습니까
val dfResults = dfSource.select(concat_ws(",",dfSource.columns.map(c => col(c)): _*))
from https://stackoverflow.com/questions/31450846/concatenate-columns-in-apache-spark-dataframe by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다중으로 선택하기 WHERE 동일한 열에 조건 (0) | 2020.03.15 |
---|---|
[SQL] SQL 서버 : 그것은 동시에 두 테이블에 삽입 할 수 있습니까? (0) | 2020.03.15 |
[SQL] 하위 쿼리 대 조인 (0) | 2020.03.15 |
[SQL] 어떻게이 CSV에 스풀 않습니다는 SQLPLUS를 사용하여 파일을 포맷? (0) | 2020.03.15 |
[SQL] 날짜 범위를 비교 (0) | 2020.03.15 |