2017-04-26 4 views
-1

inferSchema를 활성화하여 csv 파일을 spark df로 읽으려고하지만 fv_df.columns를 가져올 수 없습니다. 나는 열을 가져올 수 있어요 추가 작업을보다 내가 스키마를 추론하지 않는 경우 아래 그러나 오류 메시지spark csv 패키지의 inferSchema

>>> fv_df = spark.read.option("header", "true").option("delimiter", "\t").csv('/home/h212957/FacilityView/datapoints_FV.csv', inferSchema=True) 
>>> fv_df.columns 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/h212957/spark/python/pyspark/sql/dataframe.py", line 687, in columns 
    return [f.name for f in self.schema.fields] 
    File "/home/h212957/spark/python/pyspark/sql/dataframe.py", line 227, in schema 
    self._schema = _parse_datatype_json_string(self._jdf.schema().json()) 
    File "/home/h212957/spark/python/pyspark/sql/types.py", line 894, in _parse_datatype_json_string 
    return _parse_datatype_json_value(json.loads(json_string)) 
    File "/home/h212957/spark/python/pyspark/sql/types.py", line 911, in _parse_datatype_json_value 
    return _all_complex_types[tpe].fromJson(json_value) 
    File "/home/h212957/spark/python/pyspark/sql/types.py", line 562, in fromJson 
    return StructType([StructField.fromJson(f) for f in json["fields"]]) 
    File "/home/h212957/spark/python/pyspark/sql/types.py", line 428, in fromJson 
    _parse_datatype_json_value(json["type"]), 
    File "/home/h212957/spark/python/pyspark/sql/types.py", line 907, in _parse_datatype_json_value 
    raise ValueError("Could not parse datatype: %s" % json_value) 
ValueError: Could not parse datatype: decimal(7,-31) 

입니다. 나는 이것이 왜 이런 방식으로 작동하는지 알 수 없다. 아무도 나를 설명해 주시겠습니까?

+0

'fv_df.printSchema()'의 inferSchema 유무에 관계없이 출력되는 것은 무엇입니까? – Pushkr

답변

0

다음에 몇 가지 샘플 데이터를 제공 할 수 있다면 좋을 것입니다. CSV가 어떻게 생겼는지 우리는 어떻게 알 수 있습니까? 귀하의 질문에 관해서는, 당신의 csv 열이 항상 십진수가 아닌 것 같습니다. InferSchema는 첫 번째 행을 가져와 데이터 유형을 할당합니다.이 경우에는 DecimalType이지만 두 번째 행에는 오류가 발생할 수 있도록 텍스트가있을 수 있습니다.

스키마를 추론하지 않으면 물론 모든 것이 StringType으로 형 변환되므로 작동합니다. 당신의

data = sc.read.load(path_to_file, 
        format='com.databricks.spark.csv', 
        header='true', 
        inferSchema='true').cache() 

물론 더 많은 옵션을 추가 할 수 있습니다

2

나는이 같은 기능이 아니라 '.CSV'가 아닌 '.load', 뭔가를 사용하는 것이 좋습니다. 그럼 당신은 간단하게 얻을 수 있습니다 당신이 원하는 :

data.columns 
(열을 얻을)이 일을하는 또 다른 방법은

가 이런 식으로 사용 :

data = sc.textFile(path_to_file) 

을 그리고 헤더 (열) 만 사용 얻을 수

data.first() 

CSV 파일을 열지 않고 스키마를 가져 오는 중입니다. 위의 내용은 당신이 그들을 얻고 따라서 당신이 좋아하는 것을 조작하도록 도와줍니다.

참고 :

spark = SparkSession.builder \ 
      .master("yarn") \ 
      .appName("experiment-airbnb") \ 
      .enableHiveSupport() \ 
      .getOrCreate() 
sc = SQLContext(spark) 

행운을 빕니다 '.columns'당신 'SC'를 사용할 수는 다음과 같이 구성해야합니다!