Spark의 countVectorizer 모델을 실행하려고합니다. 이 요구 사항의 일부로, 나는 csv 파일을 읽고 그것으로부터 Dataframe (inp_DF)을 생성하고있다.Spark - countVectorizer 모델의 열 중 하나에 값 배열이 포함 된 Spark 데이터 프레임을 만드는 방법
+--------------+--------+-------+
| State|Zip Code|Country|
+--------------+--------+-------+
| kentucky| 40205| us|
| indiana| 47305| us|
|greater london| sw15| gb|
| california| 92707| us|
| victoria| 3000| au|
| paris| 75001| fr|
| illinois| 60608| us|
| minnesota| 55405| us|
| california| 92688| us|
+--------------+--------+-------+
아래와 같이 3 열이
는 I는
| kentucky| 40205| us| "kentucky","40205","us"
| indiana| 47305| us| "indiana","47305","us"
|greater london| sw15| gb| "greater london","sw15","gb"
| california| 92707| us| "california","92707","us"
| victoria| 3000| au| "victoria","3000","au"
| paris| 75001| fr| "paris","75001","fr"
| illinois| 60608| us| "illinois","60608","us"
| minnesota| 55405| us| "minnesota","55405","us"
| california| 92688| us| "california","92688","us"
모든 이러한 3 열의 값들의 어레이를 포함하는 동일한 dataframe 내의 제 4 컬럼을 만들어야 질문 1 : .concat과 같은 쉬운 명령이 있습니까?
이 배열은 countVectorizer 모델의 입력이 값의 배열을 포함하는 열이어야하므로 필요합니다. "주"java.lang.IllegalArgumentException가 스레드
예외 :이 오류 메시지가 아래에 언급 된 문자열 데이터 타입 안 요구 사항은 실패 열 상태가 중 하나에 동일한 유형이어야합니다 [ArrayType (StringType, true), ArrayType (StringType, false)] 유형이지만 실제로는 StringType 유형입니다. (SchemaUtils.scala : 58) 에서 에 scala.Predef $ .require (Predef.scala : 224)를 입력하십시오. org.apache.spark.ml.feature.CountVectorizer에서 : org.apache.spark.ml.feature.CountVectorizer.validateAndTransformSchema (123 CountVectorizer.scala)에서 : .CountVectorizerParams $ class.validateAndTransformSchema (75 CountVectorizer.scala) .transformSchema (CountVectorizer.scala 188) org.apache.spark.ml.PipelineStage.transformSchema (Pipeline.scala 74)에 org.apache.spark.ml.feature.CountVectorizer.fit에서 (CountVectorizer.scala : 155) at org.apache.spark.examples.ml.CountVectorizerExample $ .main (CountVectorizerExample.scala : 54) org.apache.spark.examples.ml.CountVectorizerExample.main (CountVectorizerExample.scala)에서 sun.reflect.NativeMethodAccessorImpl에서 java.lang.reflect.Method.invoke에서 .invoke0 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)에서 (기본 방법) (Method.java:498) at com.intellij.rt.execution.application.AppMain.main (AppMain.java:147) Java HotSpot (TM) 클라이언트 VM 경고 : 무시 옵션 MaxPermSize = 300m; 지원 I 대괄호 [] 내에 포함되는 입력 dataframe들 3 열하지만 배열 요소의 배열을 만들려고 8.0
제거 하였다.
샘플 코드를 참조
// Read Input Dataset for countVectorizer Logic
val inp_data = spark.read.format("com.databricks.spark.csv").option("header", "True").option("inferSchema", "true")
.option("treatEmptyValuesAsNulls", "true").option("nullValue", "")
.load("Input.csv")
// Creating a Spark Dataframe from the Input Data
val inp_DF = inp_data.toDF()
// Creating an array from Spark Dataframe Columns
val inp_array = inp_DF.select("State","Zip Code","Country").collect()
println(inp_array.mkString(","))
// fit a CountVectorizerModel from the corpus
val cvModel: CountVectorizerModel = new CountVectorizer()
.setInputCol("State")
.setOutputCol("features")
.setVocabSize(4)
.setMinDF(2)
.fit(inp_DF)
질문 2 아래에 주어진다 : 어떻게 그 배열 요소에서 대괄호 []를 제거하고 배열의 값으로 dataframe에 새 열을 만들려면?
질문 3 : 단일 열 값을 countVectorizer 모델의 입력으로 제공하고 기능을 출력으로 가져올 수 있습니까?
작성할array
기능을 사용할 수 있습니다