2017-07-05 11 views
5

मैं स्पार्क में एक बड़ा डेटाबेस spark_read_csv का उपयोग कर कॉपी करने के लिए कोशिश कर रहा हूँ, लेकिन मैं आउटपुट के रूप में निम्न त्रुटि हो रही है:Sparklyr - दशमलव परिशुद्धता 8 अधिकतम परिशुद्धता से अधिक 7

Error: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 16.0 failed 4 times, most recent failure: Lost task 0.3 in stage 16.0 (TID 176, 10.1.2.235): java.lang.IllegalArgumentException: requirement failed: Decimal precision 8 exceeds max precision 7

data_tbl <- spark_read_csv(sc, "data", "D:/base_csv", delimiter = "|", overwrite = TRUE) 

यह एक बड़ा है डेटा सेट, लगभग 5.8 मिलियन रिकॉर्ड, मेरे डेटासेट के साथ मेरे पास Int, num और chr के प्रकार हैं।

उत्तर

1

मुझे लगता है कि आप चिंगारी संस्करण के आधार पर कुछ विकल्प है कि आप यहां से

स्पार्क> = 1.6.1

का उपयोग कर रहे हैं: https://docs.databricks.com/spark/latest/sparkr/functions/read.df.html ऐसा लगता है, आप विशेष रूप से निर्दिष्ट कर सकते हैं अपने उपयोग करने के लिए यह मजबूर करने के लिए स्कीमा डबल्स

csvSchema <- structType(structField("carat", "double"), structField("color", "string")) 
diamondsLoadWithSchema<- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", 
           source = "csv", header="true", schema = csvSchema) 

स्पार्क < 1.6.1 पर विचार test.csv

1,a,4.1234567890 
2,b,9.0987654321 

आप आसानी से इस अधिक प्रभावी बना सकती, लेकिन मैं आपको सार

linesplit <- function(x){ 
    tmp <- strsplit(x,",") 
    return (tmp) 
} 

lineconvert <- function(x){ 
    arow <- x[[1]] 
    converted <- list(as.integer(arow[1]), as.character(arow[2]),as.double(arow[3])) 
    return (converted) 
} 
rdd <- SparkR:::textFile(sc,'/path/to/test.csv') 
lnspl <- SparkR:::map(rdd, linesplit) 
ll2 <- SparkR:::map(lnspl,lineconvert) 
ddf <- createDataFrame(sqlContext,ll2) 
head(ddf) 

    _1 _2   _3 
1 1 a 4.1234567890 
2 2 b 9.0987654321 

नोट मिल लगता है: SparkR ::: तरीकों एक कारण, डॉक्स के लिए निजी हैं कहें 'सावधान रहें जब आप इस'

का उपयोग करते हैं
संबंधित मुद्दे